这是一个两部分问题。有一天有人回答了类似的问题(其中也包含了PHP中这种类型数组的信息),但是我找不到它。
1。)首先,在表单中输入标记的name元素末尾创建的数组的正确术语是什么?
<form>
<input name="p_id[]" value="0"/>
<input name="p_id[]" value="1"/>
<input name="p_id[]" value="2"/>
</form>
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();
}
}
}
}
答案 0 :(得分: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">
)但确实让一些人感到困惑。其他一些语言已采用该约定,因为它最初是编写的,但通常仅作为可选功能。例如,通过this module for JavaScript。
2.。)如何使用JavaScript从该数组中获取信息?
这仍然只是从elements
获取与表单控件同名的属性。诀窍在于,由于表单控件的名称包含方括号,因此您不能像使用任何其他dot notation and have to use square bracket notation那样使用JavaScript property name that includes special characters。
由于您有多个具有该名称的元素,因此它将是一个集合而不是一个控件,因此您可以使用标准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];
}
答案 1 :(得分: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);
}
答案 2 :(得分:5)
document.form.p_id.length
...不计算()。
你真的应该给你的表单一个id
<form id="myform">
然后使用以下方式参考:
var theForm = document.getElementById("myform");
然后参考像:
这样的元素for(var i = 0; i < theForm.p_id.length; i++){
答案 3 :(得分:2)
按顺序回答您的问题:
1)没有具体的名称。它只是具有相同名称的多个元素(在这种情况下也是类型)。名称不是唯一的,这就是id被发明的原因(它应该是唯一的)
2)
function getElementsByTagAndName(tag, name) { //you could pass in the starting element which would make this faster var elem = document.getElementsByTagName(tag); var arr = new Array(); var i = 0; var iarr = 0; var att; for(; i < elem.length; i++) { att = elem[i].getAttribute("name"); if(att == name) { arr[iarr] = elem[i]; iarr++; } } return arr; }
答案 4 :(得分:-3)
这里有一些PHP和JavaScript演示代码,它们显示了在表单上创建索引字段的简单方法(具有相同名称的字段),然后在JavaScript和PHP中处理它们。这些字段必须包含&#34; ID&#34;姓名和&#34; NAME&#34;名。 Javascript使用ID,PHP使用NAME。
<?php
// How to use same field name multiple times on form
// Process these fields in Javascript and PHP
// Must use "ID" in Javascript and "NAME" in PHP
echo "<HTML>";
echo "<HEAD>";
?>
<script type="text/javascript">
function TestForm(form) {
// Loop through the HTML form field (TheId) that is returned as an array.
// The form field has multiple (n) occurrences on the form, each which has the same name.
// This results in the return of an array of elements indexed from 0 to n-1.
// Use ID in Javascript
var i = 0;
document.write("<P>Javascript responding to your button click:</P>");
for (i=0; i < form.TheId.length; i++) {
document.write(form.TheId[i].value);
document.write("<br>");
}
}
</script>
<?php
echo "</HEAD>";
echo "<BODY>";
$DQ = '"'; # Constant for building string with double quotes in it.
if (isset($_POST["MyButton"])) {
$TheNameArray = $_POST["TheName"]; # Use NAME in PHP
echo "<P>Here are the names you submitted to server:</P>";
for ($i = 0; $i <3; $i++) {
echo $TheNameArray[$i] . "<BR>";
}
}
echo "<P>Enter names and submit to server or Javascript</P>";
echo "<FORM NAME=TstForm METHOD=POST ACTION=" ;
echo $DQ . "TestArrayFormToJavascript2.php" . $DQ . "OnReset=" . $DQ . "return allowreset(this)" . $DQ . ">";
echo "<FORM>";
echo "<INPUT ID = TheId NAME=" . $DQ . "TheName[]" . $DQ . " VALUE=" . $DQ . "" . $DQ . ">";
echo "<INPUT ID = TheId NAME=" . $DQ . "TheName[]" . $DQ . " VALUE=" . $DQ . "" . $DQ . ">";
echo "<INPUT ID = TheId NAME=" . $DQ . "TheName[]" . $DQ . " VALUE=" . $DQ . "" . $DQ . ">";
echo "<P><INPUT TYPE=submit NAME=MyButton VALUE=" . $DQ . "Submit to server" . $DQ . "></P>";
echo "<P><BUTTON onclick=" . $DQ . "TestForm(this.form)" . $DQ . ">Submit to Javascript</BUTTON></P>";
echo "</FORM>";
echo "</BODY>";
echo "</HTML>";