Ich habe ein Formular mit 2 Senden-Schaltflächen (Ja und Nein).

Und ich habe Javascript zu einem benutzerdefinierten div, den der Benutzer seine Wahl bestätigen muss.

Mein Problem ist, wenn ich auf die Schaltfläche "Ja" oder "Nein" klicke, öffne ich immer die 2 Divs.

Wie kann ich das lösen?

Ich möchte, dass ein Div für Ja und das andere für Nein geöffnet ist.

DEMO:

FIDDLE DEMO

MEIN Javascript-Code:

 function doConfirm(msg, yesFn, noFn) {
        var confirmBox = $("#confirmBox");
        confirmBox.find(".message").text(msg);
        confirmBox.find(".yes,.no").unbind().click(function () {
            confirmBox.hide();
        });
        confirmBox.find(".yes").click(yesFn);
        confirmBox.find(".no").click(noFn);
        confirmBox.show();
    }

    function doReject(msg, yesFn, noFn) {
        var rejectBox = $("#RejectBox");
        rejectBox.find(".message").text(msg);
        rejectBox.find(".yes,.no").unbind().click(function () {
            rejectBox.hide();
        });
        rejectBox.find(".yes").click(yesFn);
        rejectBox.find(".no").click(noFn);
        rejectBox.show();
    }

    $(function () {
        $("form").submit(function (e) {
            e.preventDefault();
            var form = this;
            doConfirm("Confirma a validação deste Caso Suporte?", function yes() {
                form.submit();
            });
            doReject("Rejeitar?", function no() {
                // do nothing
            });
        });
    });
1
user2232273 20 Nov. 2013 im 18:06

3 Antworten

Beste Antwort

Sie rufen beide Eingabeaufforderungsfunktionen auf, wenn das Formular gesendet wird. Beide Schaltflächen sind Senden-Schaltflächen, sodass jeweils beide Funktionen aufgerufen werden. Sie benötigen eine Möglichkeit, zwischen den beiden Schaltflächen zu unterscheiden. Versuchen Sie so etwas:

$('form').find('button[type=submit]').click(function(e){
    e.preventDefault();
    $form = $(this).closest('form');
    if(this.name == 'yes'){
        doConfirm("Confirm that you want to validate?", function yes() {
            $form.submit();
        });
    } else {
        doReject("Confirm that you want reject?", function no() {
            // do nothing
        });
    }
});

JSFiddle

2
animuson 27 Jän. 2014 im 01:15

Ihre Probleme sind, dass Sie sowohl doConfirm als auch doReject aufrufen. Schreiben Sie eine Bedingung basierend auf der Schaltfläche, auf die sie klicken (Ja oder Nein).

1
David Christiansen 20 Nov. 2013 im 14:19

Verwenden Sie Folgendes:

var confirm; 

function doConfirm(msg, yesFn, noFn) {
    confirm = true;
        var confirmBox = $("#confirmBox");
        confirmBox.find(".message").text(msg);
        confirmBox.find(".yes,.no").unbind().click(function () {
            confirmBox.hide();
        });
        confirmBox.find(".yes").click(yesFn);
        confirmBox.find(".no").click(noFn);
        confirmBox.show();
    }

    function doReject(msg, yesFn, noFn) {
        confirm = false;
        var rejectBox = $("#RejectBox");
        rejectBox.find(".message").text(msg);
        rejectBox.find(".yes,.no").unbind().click(function () {
            rejectBox.hide();
        });
        rejectBox.find(".yes").click(yesFn);
        rejectBox.find(".no").click(noFn);
        rejectBox.show();
    }

    $(function () {
        $("form").submit(function (e) {
            e.preventDefault();
            var form = this;

            if(confirm){
            doConfirm("Confirm that you want to validate?", function yes() {
                form.submit();
            });} 
            else{
            doReject("Confirm that you want reject?", function no() {
                // do nothing
            });}
        });
    });

Ich habe eine einfache Überprüfung mit einer if-Anweisung durchgeführt. Wenn auf Ablehnen geklickt wird, ist die Bestätigung gleich wahr. Wenn auf die Schaltfläche Ablehnen geklickt wird, ist dies gleich falsch.

Geige: http://jsfiddle.net/5UbS6/3

1
Billy 20 Nov. 2013 im 14:13