带有JavaScript的HTML表单输入标记名称元素数组

ubi*_*con 21 html javascript forms input

这是一个两部分问题.有一天有人回答了类似的问题(其中也包含有关PHP中此类数组的信息),但我找不到它.

1.)首先,在表单中输入标记的name元素末尾创建的数组的正确术语是什么?

<form>

    <input name="p_id[]" value="0"/>
    <input name="p_id[]" value="1"/>
    <input name="p_id[]" value="2"/>

</form>
Run Code Online (Sandbox Code Playgroud)

2.)如何使用JavaScript从该数组中获取信息?具体来说,我现在只想计算数组的元素.这是我做的,但它不起作用.

function form_check(){
    for(var i = 0; i < count(document.form.p_id[]); i++){  //Error on this line

        if (document.form.p_name[i].value == ''){
            window.alert('Name Message');
            document.form.p_name[i].focus();
            break;
        }

        else{
            if (document.form.p_price[i].value == ''){
                window.alert('Price Message');
                document.form.p_price[i].focus();
                break;
            }

            else{
                update_confirmation();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 42

1.)首先,在表单中输入标记的name元素末尾创建的数组的正确术语是什么?

"有时令人困惑的PHPism"

就JavaScript而言,一堆具有相同名称的表单控件只是一堆具有相同名称的表单控件,而包含方括号的表单控件只是表单控件,其名称包含方括号.

PHP的命名约定表单控件具有相同的名称有时是有用的(当你有很多的控制组,这样就可以做这样的事情的:

<input name="name[1]">
<input name="email[1]">
<input name="sex[1]" type="radio" value="m">
<input name="sex[1]" type="radio" value="f">

<input name="name[2]">
<input name="email[2]">
<input name="sex[2]" type="radio" value="m">
<input name="sex[2]" type="radio" value="f">
Run Code Online (Sandbox Code Playgroud)

但确实让一些人感到困惑.其他一些语言已采用该约定,因为它最初是编写的,但通常仅作为可选功能.例如,通过这个JavaScript模块.

2.)如何使用JavaScript从该数组中获取信息?

它仍然只是获取与表单控件相同名称的属性elements.诀窍是,由于表单控件的名称包含方括号,则不能使用点符号,并必须使用方括号,就像任何其他包含特殊字符JavaScript属性的名称.

由于您有多个具有该名称的元素,因此它将是一个集合而不是单个控件,因此您可以使用标准for循环来循环它,并使用其length属性.

var myForm = document.forms.id_of_form;
var myControls = myForm.elements['p_id[]'];
for (var i = 0; i < myControls.length; i++) {
    var aControl = myControls[i];
}
Run Code Online (Sandbox Code Playgroud)

  • 使用"i"作为一个全球性并不是一个好主意(它只是要求确定范围问题,无论是现在还是将来,因为你养成了坏习惯).使用`document.form`是不好的做法,因为(a)`document.forms`集合将使你更清楚你正在做什么,`form`不是一个非常详细的名称(和`document.form`可能会混淆`document.forms`让维护变得更加混乱.尽管如此,把事情搞得一团糟很好,我只是更明确,所以你可以看到发生了什么. (3认同)

Mat*_*ing 9

尝试这样的事情:

var p_ids = document.forms[0].elements["p_id[]"];
alert(p_ids.length);
for (var i = 0, len = p_ids.length; i < len; i++) {
  alert(p_ids[i].value);
}
Run Code Online (Sandbox Code Playgroud)