2009-01-06 6 views
43

Ich möchte das aktuelle Element in ist das Eintragen Ereignis des Formulars auszulösen Verfahren I Arbeiten manchmal weiß, ist:.Gibt es eine bessere jQuery-Lösung für this.form.submit() ;?

this.form.submit(); 

Ich frage mich, ob es eine bessere Lösung ist, möglicherweise jQuery verwenden, wie ich Ich bin nicht 100% sicher Methode funktioniert in jedem Browser.

Edit:

Die Situation, die ich habe, ist, wie folgt:

<form method="get"> 
    <p><label>Field Label 
     <select onchange="this.form.submit();"> 
      <option value="blah">Blah</option> 
      .... 
     </select></label> 
    </p> 
</form> 

Ich möchte das Formular auf Änderung des <select> vorlegen können.

Was ich suche ist eine Lösung, die auf jedem Feld innerhalb eines Formulars funktioniert, ohne die ID oder den Namen auf dem Formular zu kennen. $('form:first') und $('form') funktionieren nicht, da das Formular das dritte auf der Seite sein könnte. Außerdem verwende ich jQuery bereits auf der Website, also ist die Verwendung von ein bisschen jQuery keine große Sache.

Also gibt es eine Möglichkeit, jQuery das Formular abrufen zu lassen, in dem sich die Eingabe/select/textarea befindet?

+0

Die Methode, die Sie posten, hat immer für mich gearbeitet. –

+0

Ja, warum würde this.form.submit() nicht funktionieren? – marcovtwout

Antwort

101

Ich denke, was Sie suchen, ist so etwas wie dieses:

$(field).closest("form").submit(); 

Zum Beispiel das onchange Ereignis zu behandeln, würden Sie dieses:

$(select your fields here).change(function() { 
    $(this).closest("form").submit(); 
}); 

Wenn Sie aus irgendeinem Grund Verwenden Sie jQuery 1.3 oder höher nicht, können Sie parents statt closest aufrufen.

+3

Verwenden Sie am nächsten ("Form") statt Eltern ("Form"). eltern() ruft alle Eltern des Elements ab, die Formen sind, am nächsten() stoppt die erste Form, die das Element des Elements ist – TeKapa

+2

@TeKapa: Danke. jQuery 1.3 (welches die "engste" Funktion hinzugefügt hat) kam eine Woche nachdem ich die Frage beantwortet hatte. –

0

In JQuery können Sie

$("form:first").trigger("submit") 

rufen Sie wissen nicht, ob das viel besser ist. Ich denke form.submit(); ist ziemlich universell.

3

Sie können immer JQuery-ize Ihre form.submit, aber es kann einfach anrufen das Gleiche:

$("form").submit(); // probably able to affect multiple forms (good or bad) 

// or you can address it by ID 
$("#yourFormId").submit(); 

Sie können auch attach Funktionen zur Veranstaltung einreichen, aber das ist ein anderes Konzept.

+0

Frage sagt, er will das nicht tun – Amala

+1

Es tut jetzt sicherlich. Das war in der Bearbeitung, die am Tag nach meiner Antwort stattfand. – patridge

24

Dies ist wahrscheinlich Ihre beste Wette. Insbesondere, wenn Sie jQuery nicht bereits in Ihrem Projekt verwenden, müssen Sie es (oder eine andere JS-Bibliothek) nicht einfach für diesen Zweck hinzufügen.

1

Ihre Frage in etwas verwirrend darin, dass Sie nicht erklären, was Sie mit "aktuelles Element" meinen.

Wenn Sie mehrere Formulare auf einer Seite mit allen Arten von Eingabeelementen und einem Button vom Typ "submit" haben, wird die Eingabe dieses Formulars ausgelöst, wenn Sie bei der Eingabe eines Feldes "enter" drücken. Du brauchst dort kein Javascript.

Wenn Sie jedoch mehrere "Senden" -Schaltflächen in einem Formular und keine anderen Eingaben haben (z. B. Zeilen "Zeile bearbeiten" und/oder "Zeile löschen" in der Tabelle), könnte die von Ihnen gepostete Zeile die richtige Vorgehensweise sein .

Ein anderer Weg (kein Javascript benötigt) könnte sein, alle Ihre Buttons (die vom Typ "submit" sind) verschiedene Werte zu geben. Wie folgt aus:

<form action="..."> 
    <input type="hidden" name="rowId" value="..."> 
    <button type="submit" name="myaction" value="edit">Edit</button> 
    <button type="submit" name="myaction" value="delete">Delete</button> 
</form> 

Wenn Sie auf eine Schaltfläche klicken nur das Formular enthält, wird der Button vorgelegt werden, und nur den Wert der Taste, die Sie gesendet werden getroffen (entlang anderer Eingabewerte).

Dann auf dem Server lesen Sie einfach den Wert der Variablen "myaction" und entscheiden, was zu tun ist.

3

ähnlich Matthew's Antwort fand ich nur, dass Sie Folgendes ausführen können:

$(this).closest('form').submit(); 

Falsch: Das Problem mit der Mutter Funktionalität ist, dass das Feld in der Form sein, sofort zu arbeiten muß (nicht in Tds, Etiketten usw.).

Ich stehe korrigiert: Elternteil s (mit einem s) funktioniert auch. Thxs Paolo, dass er darauf hingewiesen hat.

+0

mit Eltern ('Form'), was Sie sagten, kann wahr sein, aber mit Eltern ('Form') sollte es funktionieren, auch wenn es das Feld in einem TD ist, etc. –

+0

Wäre nicht Eltern ('Form') alle zurück Formen, die Eltern dieses Elements sind? Das würde möglicherweise ein äußeres Formular einreichen, das Sie noch nicht vorlegen wollten. – StriplingWarrior

+0

Ich bin gerade darauf gestoßen und möchte hinzufügen, dass Sie keine Formulare in Formularen haben sollten. Dies ist ungültig und funktioniert nicht in IE. Die Verwendung von 'eltern (" form ") ist also vollkommen akzeptabel, obwohl ich nicht weiß, wie effizient es im Vergleich zu" am nächsten ("Form") ist ". – ClarkeyBoy

0
<form method="get"> 
    <p><label>Field Label 
     <select onchange="this.form.submit();"> 
     <option value="blah">Blah</option> 
      .... 
    </select> 
    </label> 
    </p> 
    **<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->** 
    </form> 

<!-- 

    this.form.submit == this.form.elements['submit']; 

--> 
2

ich gefunden habe, dass jQuery die beste Lösung besteht darin,

$(this.form).submit() 

diese Aussage Jquery Plugins (z jquery form plugin) arbeitet korrekt und jquery DOM durchqueren Aufwand minimiert.