2015-01-03 6 views
5

Ich muss überprüfen, ob das Formular vom Benutzer übergeben wird und dann einige Operationen ausführen, bevor Sie das Formular programmgesteuert absenden.Warum sendet mein Formular nicht, wenn der Absenden-Button den Namen "submit" hat?

So habe ich diesen Code:

$('form').submit(function (e) { 
    e.originalEvent && e.preventDefault(); 

    //I change some things in the form here. 

    !e.isTrigger && $(this).submit(); 
}); 

Dies funktioniert gut, aber wenn das Formular Submit-Button trägt den Namen "Eintragen" es funktioniert nicht.

Es funktioniert sogar in Ordnung, wenn die Schaltfläche "Senden" heißt. (Großbuchstaben "S")

Ich bin nur neugierig, warum das ist?

Hier ist ein demo fiddle

+0

Muss einige jQuery eigenartig sein, da, wenn Sie das Javascript löschen, funktionieren beide Formulare OK. – MightyPork

Antwort

5

Sie Beute zu einigen alten DOM Macken fiel. Das heißt, bildet sich in der DOM erhalten alle ihre Eingabeelemente (Tasten, auch) als Eigenschaften von ihren jeweiligen Namen ausgesetzt:

<form> 
    <input name="foo"> 
</form> 

Ergebnisse in:

var form = document.forms[0]; 
form.foo === document.getElementsByName('foo')[0]; 

, die unglücklich ist, wenn Sie welche haben Steuern Sie mit dem Namen submit, weil es die Submit-Methode des ursprünglichen Formulars beschattet.

Bearbeiten: Übrigens, zum Lesen auf viele dieser Fallstricke schlage ich vor, einen Blick auf Kangax' fantastic DOMLint documentation zu werfen.

Verwandte Themen