2 Stimmen

Ereignis nach event.preventDefault auslösen

Ich fange Klicks auf die Schaltfläche "Submit" eines Formulars ab. Ich tue event.preventDefault() Standard-Browser-Aktion zu deaktivieren, so dass ich in der Lage bin, meine Sachen nach dem Klicken auf die Schaltfläche zu tun. In diesem Fall mache ich einen AJAX-Aufruf an den Server. Durch die Antwort vom Server möchte ich wählen, ob ich mit der Formularübermittlung fortfahre oder etwas anderes tue.

$inviteSubmitForm.find('input[name="accept"]').click(function(e){
    e.preventDefault();

    $.ajax({
        ...
        success  : function(data) {

            if (data.something) {
                ...
            } else {
                ...
            }

        }
    });
});

Das Problem dabei ist, dass ich nicht in der Lage bin, die Standardaktion der angeklickten Schaltfläche zu übertragen, da die Logik im AJAX-Callback ist. Also return true einfach die Rückruf-Funktion beenden - diesen einfachen Trick kann ich nicht anwenden. Auch bewegen e.preventDefault() ist ein No-Go, denn das Formular wird sofort übermittelt.

Irgendwelche Ideen?

0voto

PeeHaa Punkte 68988

Auslösen, um das Formular abzuschicken:

$inviteSubmitForm.find('input[name="accept"]').click(function(e){
    e.preventDefault();

    $.ajax({
        ...
        success  : function(data) {

            if (data.something) {
                // don't submit
            } else {
                $inviteSubmitForm.submit();
            }

        }
    });
});

1 Stimmen

Diese Lösung ist in Ordnung und funktioniert, aber - ich habe mehrere Übermittlungsschaltflächen im Formular. Wenn ich die Schaltflächen nach dieser Methode unterscheiden möchte, muss ich <input type="hidden"> mit dem Namen der ursprünglichen Schaltfläche "Submit" anhängen. Dies ist immer noch OK, aber ich bin auf der Suche Form systematische saubere Lösung - recast alten Ereignis der ursprünglichen Schaltfläche.

0 Stimmen

@srigi: Warum brauchen Sie ein verstecktes Eingabefeld? Das machst du doch schon: find('input[name="accept"]') die nur 1 "Typ"-Taste sein sollte. Auch wenn Sie dieselbe Funktion für mehrere Tasten haben möchten, fügen Sie einfach einen Schalter hinzu. Möchten Sie, dass ich ein Beispiel für Sie hinzufügen?

0 Stimmen

Ich persönlich würde gerne sehen, wie man das auf der Ebene der Ereignisse handhabt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X