PDA

View Full Version : Loop form elements


charon
04-22-2003, 08:12 AM
hi, just want to know how do i loop the form elements at java script function which as below:

<input type="text" name="Lot1">
<input type="text" name="Lot2">
<input type="text" name="Lot3">
<input type="text" name="Lot4">

Roelf
04-22-2003, 10:19 AM
<html>
<head>
<title>Loop through form elements</title>
<script>
function checkelements (objForm) {
var l = objForm.elements.length;
for (var i = 0; i < l; i++ ) {
alert (objForm.elements[i].name);
// or do anything you want with them
}
}
</script>
</head>

<body>
<form name="myform">
<input type="text" name="name1">
<input type="text" name="name2">
<input type="text" name="name3">
<input type="text" name="name4">
<input type="text" name="name5">
<input type="button" onclick="checkelements(this.form)">
</form>
</body>
</html>

tamago
04-22-2003, 12:29 PM
If you only want to affect those four elements, you'd as well use getElementById():for(i = 1; i < 5; i ++){
document.getElementById('Lot' + i).value = 'I\'ve been changed!'
}:o)

charon
04-23-2003, 04:33 AM
hi,
It seems like can't work. means that it can't recognise the Lot1 element

function saveRecord(thisForm)
{
with(thisForm)
{
var formLen = selectNo.value
for(i=1; i<formLen; i++)
{
if(elements[i].name=="Lot" + i)
{ alert(elements[i].name);
}
}
}

can help??

Back again,

I really wonder if i use this ->

nameEl = "Lot1"
if(elements[i].name==nameEl)

it can be treat as form element

But, it fails when i tried to use these:

nameEl = "Lot1" + i
if(elements[i].name==nameEl)

myString1 = new String("Lot")
var nameEl = myString1.concat(i)
if(elements[i].name==nameEl)

tamago, I try use your way, but also canoot..

Please advice.

Roelf
04-23-2003, 06:32 AM
thats because the alements array starts numbering at 0, you start numbering at 1.
the first element in the form (you named it Lot1) has index 0 in the array so the condition:
elements[i].name=="Lot" + i
will never be true in this situation

charon
04-23-2003, 09:07 AM
oh ya.....my god, thank you

charon
04-24-2003, 03:30 AM
I really wonder the functions work fine yesterday, but suddenly can't. Below is the code:

function saveRecord(thisForm)
{
with(thisForm)
{
var formLen = selectNo.value
var eleLen = thisForm.length
for(var i=1; i<formLen; i++)
{
for(var j=0; j<eleLen; j++)
{
// alert(elements[j].name)
if(elements[j].name=="Lot" + i)
{
if (emptyField(elements[j].name, "Please fill in lot number: " + elements[j].name)==false)
{
return false;
//alert(elements[j].name)
}
}

}
}
}

}


function emptyField(thisfield, alertmsg)
{
var fieldStr
var fieldEmp
var reg = /\s/g;

fieldStr = thisfield.value
fieldEmp = fieldStr.replace(reg, "")
if ((thisfield.value == "") || (fieldEmp == ""))
{
alert(alertmsg);
thisfield.focus();
return (false);

}

}
my error message is:


Underfined is null or not an object

charon
04-24-2003, 03:36 AM
I know already, because of the

with(thisForm) ,

if using :

if (emptyField(thisForm.elements[j].name, "Please fill in lot number: " + elements[j].name)==false)

then no problem. But for some others part like :

if(thisForm.elements[j].name=="Lot" + i)
alert(thisForm.elements[j].name)

it works fine, just want to know WHY??????

glenngv
04-24-2003, 03:42 AM
the argument thisfield in the function emptyField() expects a reference to the field, not its name.


if (emptyField(elements[j],...)...

charon
04-24-2003, 04:25 AM
oh ya, thanks....i really dreaming lah.....