Ja oder Nein Bestätigungsfeld mit jQuery


121

Ich möchte Ja / Nein-Warnungen mit jQuery anstelle der Schaltfläche OK / Abbrechen:

jQuery.alerts.okButton = 'Yes';
jQuery.alerts.cancelButton = 'No';                  
jConfirm('Are you sure??',  '', function(r) {
    if (r == true) {                    
        //Ok button pressed...
    }  
}

Irgendwelche anderen Alternativen?



Schauen Sie sich die jQuery-Benutzeroberfläche an : jqueryui.com/demos/dialog/#modal-confirmation
jAndy


3
$ .alerts.okButton = 'Ja'; $ .alerts.cancelButton = 'Nein'; jConfirm ('Bist du sicher?', '', Funktion (r) {if (r == true) {// Ok-Taste gedrückt ...}}
Sushanth CS

2
Eine andere JQuery Dialog-Lösung ähnelt eher einer verify () -Funktion, die Folgendes zurückgibt: stackoverflow.com/a/18474005/1876355 Ich hoffe, dies hilft
Pierre

Antworten:


129

ConfirmDialog('Are you sure');

function ConfirmDialog(message) {
  $('<div></div>').appendTo('body')
    .html('<div><h6>' + message + '?</h6></div>')
    .dialog({
      modal: true,
      title: 'Delete message',
      zIndex: 10000,
      autoOpen: true,
      width: 'auto',
      resizable: false,
      buttons: {
        Yes: function() {
          // $(obj).removeAttr('onclick');                                
          // $(obj).parents('.Parent').remove();

          $('body').append('<h1>Confirm Dialog Result: <i>Yes</i></h1>');

          $(this).dialog("close");
        },
        No: function() {
          $('body').append('<h1>Confirm Dialog Result: <i>No</i></h1>');

          $(this).dialog("close");
        }
      },
      close: function(event, ui) {
        $(this).remove();
      }
    });
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>


2
ist das jquery-ui oder einfache alte jquery? Ich sehe .dialog () nirgendwo in der Dokumentation von jQuery.
Chovy

11
Sie müssen jquery und jquery ui script in Ihre Seite aufnehmen.
Thulasiram

@ Thulasiram Wie kann ich das Plugin im yii2Framework hinzufügen ?
Faisal

113

Die Alert-Methode blockiert die Ausführung, bis der Benutzer sie schließt:

Verwenden Sie die Bestätigungsfunktion:

if (confirm('Some message')) {
    alert('Thanks for confirming');
} else {
    alert('Why did you press cancel? You should have confirmed');
}

3
confirmist "OK CANCEL", nicht "YES NO".
KlaymenDK

57

Ich habe diese Codes verwendet:

HTML:

<a id="delete-button">Delete</a>

jQuery:

<script>
$("#delete-button").click(function(){
    if(confirm("Are you sure you want to delete this?")){
        $("#delete-button").attr("href", "query.php?ACTION=delete&ID='1'");
    }
    else{
        return false;
    }
});
</script>

Diese Codes funktionieren für mich, aber ich bin mir nicht sicher, ob dies richtig ist. Was denken Sie?


3
Dies funktioniert für michif(confirm("Are you sure you want to return this meter?")){ return true; } else{ return false; }
Faisal

Mehr kürzer return confirm("Are you sure you want to return this meter?")))
Павел Зорин


12

Alle Beispiele, die ich gesehen habe, können nicht für verschiedene Fragen vom Typ "Ja / Nein" wiederverwendet werden. Ich suchte nach etwas, mit dem ich einen Rückruf angeben konnte, damit ich für jede Situation anrufen konnte.

Folgendes funktioniert gut für mich:

$.extend({ confirm: function (title, message, yesText, yesCallback) {
    $("<div></div>").dialog( {
        buttons: [{
            text: yesText,
            click: function() {
                yesCallback();
                $( this ).remove();
            }
        },
        {
            text: "Cancel",
            click: function() {
                $( this ).remove();
            }
        }
        ],
        close: function (event, ui) { $(this).remove(); },
        resizable: false,
        title: title,
        modal: true
    }).text(message).parent().addClass("alert");
}
});

Ich nenne es dann so:

var deleteOk = function() {
    uploadFile.del(fileid, function() {alert("Deleted")})
};

$.confirm(
    "CONFIRM", //title
    "Delete " + filename + "?", //message
    "Delete", //button text
    deleteOk //"yes" callback
);

4

Ich hatte Probleme, die Antwort aus dem Dialogfeld zurückzugewinnen, fand aber schließlich eine Lösung, indem ich die Antwort aus dieser anderen Frage kombinierte: Ja-und-Nein-Schaltflächen anstelle von OK und Abbrechen bei Bestätigung. Feld mit einem Teil des Codes aus dem Dialogfeld zur Bestätigung des Modals

Dies wurde für die andere Frage vorgeschlagen:

Erstellen Sie Ihr eigenes Bestätigungsfeld:

<div id="confirmBox">
    <div class="message"></div>
    <span class="yes">Yes</span>
    <span class="no">No</span>
</div>

Erstellen Sie Ihre eigene confirm()Methode:

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();
}

Nennen Sie es mit Ihrem Code:

doConfirm("Are you sure?", function yes()
{
    form.submit();
}, function no()
{
    // do nothing
});

Meine Änderungen ich die oben gezwickt haben , so dass anstelle des Aufrufs confirmBox.show() ich verwendet confirmBox.dialog({...}) wie dieses

confirmBox.dialog
    ({
      autoOpen: true,
      modal: true,
      buttons:
        {
          'Yes': function () {
            $(this).dialog('close');
            $(this).find(".yes").click();
          },
          'No': function () {
            $(this).dialog('close');
            $(this).find(".no").click();
          }
        }
    });

Die andere Änderung, die ich vorgenommen habe, war das Erstellen des Bestätigungsfelds div innerhalb der Funktion doConfirm, wie es ThulasiRam in seiner Antwort getan hat.


0

Ich musste eine Übersetzung auf die Schaltflächen OK und Abbrechen anwenden. Ich habe den Code so geändert, dass er keinen dynamischen Text enthält (ruft meine Übersetzungsfunktion auf).


$.extend({
    confirm: function(message, title, okAction) {
        $("<div></div>").dialog({
            // Remove the closing 'X' from the dialog
            open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); },
            width: 500,
            buttons: [{
                text: localizationInstance.translate("Ok"),
                click: function () {
                    $(this).dialog("close");
                    okAction();
                }
            },
                {
                text: localizationInstance.translate("Cancel"),
                click: function() {
                    $(this).dialog("close");
                }
            }],
            close: function(event, ui) { $(this).remove(); },
            resizable: false,
            title: title,
            modal: true
        }).text(message);
    }
});


0

Versuchen Sie dies ... Es ist sehr einfach, verwenden Sie einfach das Bestätigungsdialogfeld für die Warnung mit JA | NEIN.

if (bestätigen ("Möchten Sie ein Upgrade durchführen?")) {Ihr Code}


-3

Sie können Ihre Bestätigung wiederverwenden:

    function doConfirm(body, $_nombrefuncion)
    {   var param = undefined;
        var $confirm = $("<div id='confirm' class='hide'></div>").dialog({
            autoOpen: false,
            buttons: {
                Yes: function() {
                param = true;
                $_nombrefuncion(param);
                $(this).dialog('close');
            },
                No: function() {
                param = false;
                $_nombrefuncion(param);
                $(this).dialog('close');
            }
                                    }
        });
        $confirm.html("<h3>"+body+"<h3>");
        $confirm.dialog('open');                                     
    };

// for this form just u must change or create a new function for to reuse the confirm
    function resultadoconfirmresetVTyBFD(param){
        $fecha = $("#asigfecha").val();
        if(param ==true){
              // DO THE CONFIRM
        }
    }

//Now just u must call the function doConfirm
    doConfirm('body message',resultadoconfirmresetVTyBFD);

2
Bitte verwenden Sie korrektes Englisch und vermeiden Sie Abkürzungen wie "u". Es ist auch besser, wenn Sie Ihren Code ein wenig erklären können, um das OP zu veranschaulichen und aufzuklären, und wenn Sie der Meinung sind, dass Ihre Antwort besser ist als die zuvor veröffentlichten.
Davidmh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.