Frage

Ich arbeite an der Web-GUI eines Appliance-ähnlichen Produkts.

Ich habe ein HTML -Formular, das einwandfrei funktioniert: Es zeigt eine Liste von Dingen mit Kontrollkästchen an. Der Benutzer überprüft einige davon und klickt auf die Schaltfläche "Entfernen", die das Formular einreicht. Der Server erhält den Beitrag, entfernt die Elemente und aktualisiert die Seite. Alles gut.

Es ist eine Voraussetzung, um zu "sind Sie sicher?" Bestätigung in das Formular. Wenn ich einen Anruf hinzufüge

 confirm("are you sure?");

Als OnSubmit-Methode im Formular Tag oder die Onclick im Taste-Tag-Tag funktioniert es gut, verwendet jedoch den hässlichen Browser-nativen Bestätigungsdialog.

An anderer Stelle im Produkt haben wir einen schönen, benutzerdefinierten CSS-Stil-Bestätigungsdialog, den ich gerne verwenden würde, aber es funktioniert so: An der entsprechenden Stelle rufen Sie einen Anruf an

myConfirm("Confirm", "Are you sure", "Yes", "No", confirmCallback);

Dadurch wird ein ClickMask angelegt, ein Dialog anpasst, zentriert und zeigt ihn an und gibt dann Falsch zurück, und das Formular wird nicht eingereicht.

Wenn der Benutzer später entscheidet, wenn er "Ja" drückt, wird die Bestätigungsfunktion aufgerufen. In der anderen Seite werden AJAX -basierte Seiten des Produkts, die Informationen sammelt, einen Postkörper erstellt und das AJAX -Objekt des Prototyps verwendet, um ihn zu veröffentlichen, und alles ist in Ordnung. (Wenn "Nein", dann werden das Dialog und das Clickmask entfernt und die Dinge gehen weiter.)

Auf dieser einfacheren Seite habe ich mit dem reinen HTML -Formular eine Bestätigungsfunktion, die so aussieht:

var confirmCallback = function() {
    document.myForm.submit();
}

Und es feuert in Ordnung, aber wenn das Formular eingereicht wird, wurde bereits die Schaltfläche "Entfernen" geklickt und das Fehlverhalten, das durch die benutzerdefinierte Bestätigungsübermittlung zurückgegeben wurde. Stattdessen wird dies als neue Einreichung angesehen, und die Schaltfläche "Entfernen" wurde nicht tatsächlich geklickt, sodass sie nicht als "erfolgreich" in Bezug auf W3.orgs HTML 4 -Standard -Standard -Abschnitt 17.13.3 angesehen wird. Der Server erhält die Daten, keine Schaltfläche Entfernen, "Ich habe es verstanden, aber ich weiß nicht, was ich damit mache" und nur die nächste Seite serviert.

Wenn Sie so weit gelesen werden, danke und hier ist meine tatsächliche Frage. Wie kann ich in meiner Bestätigungs -JavaScript -Funktion auf Cross -Browser -Weise dazu führen, dass die Schaltfläche entfernen, "erfolgreich" werden und zusammen mit den restlichen Daten einreichen?

War es hilfreich?

Lösung

Klingt so, als würden Sie ein verstecktes Feld brauchen, um so zu tun, als ob Sie die gedrückte Taste sind, und für jede Taste ist kein Name erforderlich, sondern ein Onclick -Ereignis, um den Wert des versteckten Feldes zu manipulieren.

Wenn der Name der Schaltflächen alle unterschiedlich ist, müssen Sie möglicherweise DOM -Methoden verwenden, um das versteckte Feld hinzuzufügen, da ich nicht glaube, dass Sie den Namen eines Feldes ändern können, sobald es in allen Browsern zum DOM hinzugefügt wurde.

Wenn Sie diese Lösung benötigen, um noch ohne JS zu arbeiten, müssen Sie möglicherweise ein wenig mehr mit der JS -Logik herumspielen (um mehr Änderungen an Ihrem anfänglichen DOM -Baum vorzunehmen) oder den Servercode ändern. Sie könnten sogar das Verhalten "Sind Sie sicher" in die Antwort einfügen ...

Andere Tipps

Angenommen, die Schaltfläche "Entfernen" ist die Schaltfläche Senden für dieses Formular, dann ist wahrscheinlich die einfachste Lösung, dem Formular eine ID zu geben

<form id="submitForm"...

Rufen Sie dann in Ihrem Bestätigungsantrag das Formular ein

document.getElementById("submitForm").submit()

Ich denke, das wird das tun, was Sie fragen, aber es scheint, als ob Sie schon so ziemlich schon bei dieser Lösung waren. Wenn Sie also etwas anderes fragen, lassen Sie es mich wissen.

Entfernen Sie in Ihrem Rückruf den Onclick -Handler für die Schaltfläche (die Bestätigung verursachen) und lösen Sie dann eine Klick auf die Schaltfläche. Auf diese Weise klicken Sie auf die Schaltfläche, um das Formular einzureichen, und führt dazu, dass die Schaltfläche zusammen mit den Formulardaten zurückgeschrieben wird.

var confirmCallback = function() {
    $('submitButton').stopObserving('click');
    $('submitButton').click();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top