Autor Zpráva
Cakewalk
Profil
Zdravím všechny.
Prosím o radu s problém zařazení funkce onChange. Jsem v Javě začátečník a tak prosím o trpělivost.
Mám formulář, kde potřebuji dvě kolonky sloučit tak, že když zákazník vyplní jednu obsah se zkopíruje okamžitě i do druhé. Řešil jsem to přes funkci onChange, což je sice dost zbytečně složité, ale funguje. Ale pouze do doby než přejmenuji názvy polí.
Uvedu příklad:

<SCRIPT TYPE="text/javascript">
<!-- 
function orderTotal(oform)
{
// set references to fields
var start_price = oform["start_price"];
var stHold = oform["stHold"];

var stVis = oform["stVis"];

// only bother if the field has contents
if (start_price == "")return;

// if the with is not a number (NaN)
// or is zero or less
// everything goes blank
if(isNaN(start_price.value) || (start_price.value <= 0))
   {
   start_price.value = "";
   stHold.value = "";
   }
   
// else the field is a valid number, so calculate the 
// total order cost and put that value in the 
// hidden subtotal field
else
   stHold.value = (Math.round(start_price.value * 1 * 100))/100;

// call the routine which checks if the 
// visible subtotal is correct
visTotal(oform);
}

// checks if the visible subtotal is correct
// ie, if it equals the hidden subtotal field
function visTotal(oform)
{
var stHold = oform["stHold"];
var stVis = oform["stVis"];

if (stVis.value != stHold.value)
   stVis.value = stHold.value;
}
// -->
</SCRIPT>

<TABLE BORDER CELLPADDING=3>
<!-- table titles -->


<!-- v-neck sweater -->
<TR BGCOLOR="#FFFFCC">
   
   <TD><INPUT TYPE=TEXT NAME="start_price" SIZE=3 
         onChange="orderTotal(this.form, 'start')" 
         ></TD>
   
   <TD ALIGN=RIGHT>
      <INPUT TYPE=HIDDEN NAME="stHold">
      <INPUT TYPE=TEXT NAME="stVis" SIZE=10 
         onChange="visTotal(this.form)" 
         ></TD>
   </TR>


</TABLE>

Tento script nefunguje, ale když se pole start_price jmenuje jen price. Je vše OK. Nevíte, kde je chyba. Případně, jak by šlo vyřešit kopírování řádku ve formuláři jinak?
Moc díky za pomoc.

Moderátor Chamurappi: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
_es
Profil
Cakewalk:
Jsem v Javě začátečník
JavaScript není Java

když se pole start_price jmenuje jen price. Je vše OK. Nevíte, kde je chyba.
No tak prečo ho premenúvaš:-)?
Alebo ho potom premenuj aj v JS kóde. Kde JS pristupuje k elementu s takým názvom si snáď nájdeš aj sám.
Witiko
Profil
Cakewalk:
Tento script nefunguje, ale když se pole start_price jmenuje jen price.
To bude kvůli tomuto řádku:
var start_price = oform["start_price"];
oform["start_price"] odkazuje na formulářový prvek jménem start_price uvnitř formuláře, který je nejspíš definovaný někde mimo zaslaný kód.
Cakewalk
Profil
Díky za reakci.
To pole se musí jmenovat start_price a pole, kde se to má přesně kopírovat se musí jmenovat buyout_price. Toto musím zachovat.
Spíš bych řekl, že je script bere ten název jako jméno s prefixem a to je problém. Spíš bych to řešil jiným kódem, ale nevím jakým.
_es
Profil
Cakewalk:
Viď [#3].
Cakewalk
Profil
Díky všem, problém jsem vyřešil jednoduchou formou:

<script type="text/javascript">
function copy()
{
var tmp = document.getElementById('price').value;
tmp = tmp.replace(/[/]+/g, "R");
document.getElementById('buyout_field').value = tmp;
}
</script>

Jednoduché a prosté. Ještě jednou díky.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0