2011-01-06 14 views
5

Betrachten Sie die folgende einfache Form:Javascript/HTML-Formularfeld Benennung Ausgabe

<form method="GET" action="handle.php"> 
    <input type="hidden" name="action" value="search"> 
</form> 

Formular Vorlage von Javascript (iui) in einem Ajax-Aufruf durchgeführt wird. Alle Felder werden ordnungsgemäß aus dem Formular gesammelt. Javascript möchte dann den Ajax-Aufruf an "form.action" senden.

Hier beginnt mein Problem. Das Objekt Formular ist vom Typ HTMLFormElement. Die Aktion Eigenschaft des Formulars soll vom Typ string sein und "handle.php" enthalten. Nach einigen Stunden Debugging habe ich festgestellt, dass form.action jetzt vom Typ HTMLInputElement ist.

Meine Frage: Ist das richtige Javascript-Verhalten? Ich hätte nie gedacht, dass ein Formularfeld mit dem Namen eines Formularattributs definiert würde. In der Zwischenzeit habe ich das Problem gelöst, indem ich mein Feld anders benannt habe.

Vielen Dank im Voraus für jede Beratung ...


eine einfache Möglichkeit, mein Problem darstellen kann gefunden. Zuerst wird die Form mit dem Problem:

<form action="test.php"> 
    <input type="hidden" name="action" value="test"> 
    <input type="button" onclick="alert(this.form.action);"> 
</form> 

Und die Form, die richtige ist:

<form action="test.php"> 
    <input type="hidden" name="NOT_AN_ATTRIBUTE_NAME" value="test"> 
    <input type="button" onclick="alert(this.form.action);"> 
</form> 

Im ersten, die Pop-up-Staaten "[object Htmlinputelement]", in der zweiten: „http://localhost/test.php ".

+0

Könnten Sie bitte auch den JavaScript-Code hinzufügen – sunn0

+0

Ich weiß nicht, ob das für JS richtig ist, aber es scheint in einer Weise, die Sie beschrieben, ist das große Problem, Eingabe-Namen von Aktion zu einem anderen Namen zu ändern? – Chris

+0

@Chris: offensichtlich habe ich es schon gelöst, indem ich mein Feld umbenannt habe. Aber das Problem bleibt beim Buchen von Formularen mit Javascript in Ajax-Aufrufen. Formularfelder dürfen nicht den gleichen Namen wie Formularattribute haben. – djBo

Antwort

3

Das Problem verwenden console.log können Sie sehen sind, weil Formulare in JavaScript speziell sind. Alle ihre Felder sind als Eigenschaften zugänglich, wenn Sie also this.form.action verwenden, wird die Feld Aktion, nicht das HTML-Attribut action="test.php".

Versuchen Sie stattdessen alert(this.form.action); zu alert(this.form.getAttribute('action')) zu ändern.

+0

/Matthew: getAttribute scheint zu arbeiten. Es gibt keine vollständige URL wie diese.Form.Action, aber zum Glück kümmert sich Ajax nicht allzu sehr. – djBo

0

Es scheint als Fehler. Vielleicht ein Array für ‚action‘ sollte

<form action="test.php"> 
    <input type="hidden" name="action" value="test"> 
    <input type="button" onclick="alert(this.form.action[0]);"> //the form action 
    <input type="button" onclick="alert(this.form.action[1]);"> // the text input 
</form> 
+0

Dies wird nicht funktionieren. – Matt

+0

@Matt: Ja, sein Vorschlag zur Lösung, der in Javascript selbst aufgenommen werden musste. – Chris

0

Ihre this.form.action ist immer noch ein Objekt. Anstatt alert in eine console.log(this.form.action) zu setzen und Firebug und Firequery zu verwenden, versuchen Sie herauszufinden, welche Ereignisse/Eigenschaften Ihr this.form.action hat.

! Benötigen Sie Ihre Konsole in Firebug zu aktivieren, bevor Sie