7

My question is: How do I reference a dynamic 'name' of an input element in a form?

For instance, with the following HTML:

<form>
    <input type="text" name="qty1" value="input1" />
     <input type="text" name="qty2" value="input2" />
     <input type="text" name="qty3" value="input3" />

    <input type="submit" value="Submit" onClick="checkVal(this.form); return false;" />
</form>

Javascript:

function checkVal(form) {
    for (var i = 1; i <= 3; i++) {
        alert(form.qty+i.value);  // Here's where my problem is..
    }
}

The above javascript does not work. The alert is outputting NaN.

How do I reference qty1, qty2, and qty3 in a for loop using i variable?

Here's a jsfiddle: http://jsfiddle.net/MRzWf/

1
  • alert(document.getelementbyid('qty' + i).value); Commented Feb 14, 2014 at 18:44

5 Answers 5

10

Use Bracket notation

 form["qty" + i].value

function checkVal(form) {
    for (var i = 1; i <= 3; i++) {
        console.log("qty" + i, form["qty" + i].value);
    }
}
<form>
    <input type="text" name="qty1" value="input1" />
    <br/>
    <input type="text" name="qty2" value="input2" />
    <br/>
    <input type="text" name="qty3" value="input3" />
    <br/>
    <input type="submit" value="Submit" onClick="checkVal(this.form); return false;" />
</form>

Sign up to request clarification or add additional context in comments.

Comments

3

Simply login as a dictionary

http://jsfiddle.net/MRzWf/2/

 alert(form["qty"+i].value);

Comments

1

Problem is form.qty+i,

To access the element of array you should used index inside the parenthesis.

There is another way to check value of input. Here is one.

  function checkVal(form) {
    var allInputs = document.getElementsByTagName('input');
    for (var i = 0; i < 3; i++) {
          if(allInputs[i].type == 'text'){
                alert(allInputs[i].value);  
          }
    }
}

DEMO

1 Comment

you never use the arg 'form' can remove that
1

Standard Solution

Using: form.elements[] should work in all browsers..

function checkVal(form) {
    for (var i = 1; i <= 3; i++) {
        alert(form.elements["qty"+i].value);

        /* OR using dynamic name variable
        var ename = "qty"+i;
        alert(form.elements[ename].value);
        */
    }
}

Comments

0

Try this. It works for the above problem

function checkVal(form) {
for (var i = 0; i < 3; i++) {
    alert(document.getElementsByTagName("input")[i].value);
}  }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.