HTML-элемент ввода тега с именем JavaScript
Это вопрос из двух частей. Кто-то ответил на аналогичный вопрос на днях (в котором также содержится информация об этом типе массива в 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();
}
}
}
}
Ответы
Ответ 1
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">
), но путают некоторых людей. Некоторые другие языки приняли конвенцию, поскольку это было изначально написано, но в целом только в качестве дополнительной функции. Например, через этот модуль для JavaScript.
2.) Как мне получить информацию из этого массива с помощью JavaScript?
Это все еще вопрос получения свойства с тем же именем, что и управление формой из elements
. Фокус в том, что поскольку имя элемента управления формы включает в себя квадратные скобки, вы не можете использовать точечную нотацию и использовать квадратную скобку нотации как и любое другое имя свойства JavaScript, которое включает специальные символы.
Поскольку у вас есть несколько элементов с этим именем, это будет сбор, а не один элемент управления, поэтому вы можете перебрать его со стандартным циклом, который использует его свойство 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];
}
Ответ 2
Попробуйте следующее:
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);
}
Ответ 3
document.form.p_id.length
... not count().
Вы действительно должны указать свою форму id
<form id="myform">
Затем обратитесь к нему, используя:
var theForm = document.getElementById("myform");
Затем обратитесь к элементам типа:
for(var i = 0; i < theForm.p_id.length; i++){
Ответ 4
Чтобы ответить на ваши вопросы в порядке:
1) Для этого нет конкретного имени. Это просто несколько элементов с тем же именем (и в этом случае тоже типа). Имя не уникально, поэтому Иден изобрел (он должен быть уникальным).
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;
}
Ответ 5
Вот пример кода демонстрации PHP и JavaScript, который показывает простой способ создания индексированных полей в форме (поля с тем же именем), а затем обрабатывать их как в JavaScript, так и в PHP. Поля должны иметь имена "ID" и "NAME". Javascript использует идентификатор, а 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>";