it-swarm.com.de

HTML Formular Eingabe Tag Name Element Array mit JavaScript

Dies ist eine zweiteilige Frage. Jemand hat neulich eine ähnliche Frage beantwortet (die auch Informationen über diese Art von Array in PHP enthielt), aber ich kann sie nicht finden.

1.) Was ist die richtige Terminologie für ein Array, das am Ende des Namenselements eines Eingabe-Tags in einem Formular erstellt wird?

<form>

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

</form>

2.) Wie erhalte ich die Informationen aus diesem Array mit JavaScript? Insbesondere möchte ich im Moment nur die Elemente des Arrays zählen. Hier ist, was ich getan habe, aber es funktioniert nicht.

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();
            }
        }
    }
}
21
ubiquibacon

1.) Was ist die richtige Terminologie für ein Array, das am Ende des Namenselements eines Eingabe-Tags in einem Formular erstellt wird?

"Oft verwirrender PHPismus"

Für JavaScript sind eine Reihe von Formularsteuerelementen mit demselben Namen nur eine Reihe von Formularsteuerelementen mit demselben Namen, und Formularsteuerelemente mit Namen, die eckige Klammern enthalten, sind nur Formularsteuerelemente mit Namen, die eckige Klammern enthalten.

Die PHP Namenskonvention für Formularsteuerelemente mit demselben Namen ist manchmal nützlich (wenn Sie mehrere Gruppen von Steuerelementen haben, können Sie also Folgendes tun:

<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">

) verwirrt aber manche Leute. Einige andere Sprachen haben die Konvention übernommen, da diese ursprünglich geschrieben wurde, jedoch im Allgemeinen nur als optionale Funktion. Zum Beispiel über dieses Modul für JavaScript .

2.) Wie erhalte ich die Informationen aus diesem Array mit JavaScript?

Es geht nur darum, die Eigenschaft mit demselben Namen wie das Formularsteuerelement von elements abzurufen. Der Trick ist, dass Sie, da der Name der Formularsteuerelemente eckige Klammern enthält, die Punktnotation nicht verwenden können und die eckige Klammernotation wie jede andere verwenden müssen anderer JavaScript-Eigenschaftsname, der Sonderzeichen enthält.

Da Sie über mehrere Elemente mit diesem Namen verfügen, handelt es sich eher um eine Auflistung als um ein einzelnes Steuerelement, sodass Sie eine Schleife mit einem Standard für die Schleife ausführen können, bei der die Eigenschaft length verwendet wird.

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];
}
42
Quentin

Versuchen Sie dies in etwa so:

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);
}
9
Matt King

document.form.p_id.length ... nicht zählen().

Sie sollten Ihrem Formular wirklich eine ID geben

<form id="myform">

Dann beziehen Sie sich darauf mit:

var theForm = document.getElementById("myform");

Dann beziehen Sie sich auf die Elemente wie:

for(var i = 0; i < theForm.p_id.length; i++){
4
Andir

So beantworten Sie Ihre Fragen in der angegebenen Reihenfolge:
1) Es gibt keinen bestimmten Namen dafür. Es sind einfach mehrere Elemente mit demselben Namen (und in diesem Fall auch Typ). Der Name ist nicht eindeutig, weshalb die ID erfunden wurde (sie soll eindeutig sein).
2)

 Funktion getElementsByTagAndName (Tag, Name) {
 // Sie könnten das Startelement übergeben, was dies schneller machen würde 
 var elem = document.getElementsByTagName (Tag); 
 var arr = neues Array (); 
 var i = 0; 
 var iarr = 0; 
 var att; 
 für (; i <elem.length; i ++) {
 att = elem [i] .getAttribute ("name"); 
 if (att == name) {
 arr [iarr] = elem [i]; 
 iarr ++; 
} 
} 
 return arr; 
} 
2
jmoreno