it-swarm.com.de

Wie wähle ich das übergeordnete Formular aus, basierend darauf, auf welche Senden-Schaltfläche geklickt wird?

Ich habe eine Webseite mit 3 Formularen. Nicht verschachtelt, nur eine nach der anderen (sie sind fast identisch, nur eine versteckte Variable, die sich unterscheidet). Ein Benutzer füllt nur ein Formular aus, und ich möchte alle Formulare mit nur einem JS-Skript validieren.

Wie kann ich also festlegen, dass mein js-Skript nur die Felder in form1 verarbeitet, wenn ein Benutzer auf die Schaltfläche zum Senden von Formular 1 klickt? Ich nehme an, es hat etwas mit $ (this) .parents zu tun, aber ich bin nicht sicher, was ich damit anfangen soll.

Mein Validierungsskript (das ich an anderer Stelle mit nur einem Formular verwendet habe) sieht ungefähr so ​​aus:


$(document).ready(function(){
    $("#submit").click(function(){
        $(".error").hide();
        var hasError = false;

        var nameVal = $("#name").val();
        if(nameVal == '') {
            $("#name").after('Please enter your name.');
            hasError = true;
        }


        if(hasError == false) {blah blah do all the processing stuff}

Muss ich also Dinge wie $ ("# name"). Val () durch $ (this) .parents ('form'). Name.val () ersetzen? Oder gibt es einen besseren Weg, dies zu tun?

Vielen Dank!

119
Eileen

Sie können das Formular folgendermaßen auswählen:

$("#submit").click(function(){
    var form = $(this).parents('form:first');
    ...
});

Im Allgemeinen ist es jedoch besser, das Ereignis an das Übermittlungsereignis des Formulars selbst anzuhängen, da es auch beim Übermitteln durch Drücken der Eingabetaste in einem der Felder ausgelöst wird:

$('form#myform1').submit(function(e){
     e.preventDefault(); //Prevent the normal submission action
     var form = this;
     // ... Handle form submission
});

Verwenden Sie den Formularkontext, um Felder innerhalb des Formulars auszuwählen. Beispielsweise:

$("input[name='somename']",form).val();
179
Eran Galperin

Diese Antwort habe ich bei der Suche nach der Form eines Eingabeelements gefunden. Ich wollte eine Notiz hinzufügen, da es jetzt einen besseren Weg gibt, als Folgendes zu verwenden:

var form = $(this).parents('form:first');

Ich bin mir nicht sicher, wann es zu jQuery hinzugefügt wurde, aber die Methode "closer ()" erledigt genau das, was sauberer benötigt wird als die Verwendung von "parent ()". Mit "Am nächsten" kann der Code folgendermaßen geändert werden:

var form = $(this).closest('form');

Es durchläuft und findet das erste Element, das dem entspricht, wonach Sie suchen, und stoppt dort, sodass es nicht erforderlich ist, Folgendes anzugeben: first.

62
TC0072

Um das Formular zu bekommen, dass der Submit drin ist, warum nicht einfach

this.form

Einfachster und schnellster Weg zum Ergebnis.

45
redsquare

ich habe die folgende Methode verwendet und es hat gut funktioniert für mich

$('#mybutton').click(function(){
        clearForm($('#mybutton').closest("form"));
    });

$('#mybutton').closest("form") hat den Trick für mich gemacht.

4
charles

Eileen: Nein, es ist nicht var nameVal = form.inputname.val();. Es sollte entweder ...

in jQuery:

// you can use IDs (easier)

var nameVal =  $(form).find('#id').val();

// or use the [name=Fieldname] to search for the field

var nameVal =  $(form).find('[name=Fieldname]').val();

Oder in JavaScript:

var nameVal = this.form.FieldName.value;

Oder eine Kombination:

var nameVal = $(this.form.FieldName).val();

Mit jQuery können Sie sogar alle Eingaben in der Form durchlaufen:

$(form).find('input, select, textarea').each(function(){

  var name = this.name;
  // OR
  var name = $(this).attr('name');

  var value = this.value;
  // OR
  var value = $(this).val();
  ....
  });
3
Lathan