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?

Sushanth CS
quelle
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>

Thulasiram
quelle
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');
}
Ana El Bembo
quelle
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?

user3678239
quelle
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?")))
Павел Зорин
28

Schauen Sie sich dieses jQuery-Plugin an: jquery.confirm .

<a href="home" class="confirm">Go to home</a>

und dann:

$(".confirm").confirm();

Daraufhin wird ein Bestätigungs-Popup angezeigt, bevor Sie dem Link folgen.

Hier gibt es eine Demo: http://myclabs.github.com/jquery.confirm/

Matthieu Napoli
quelle
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
);
MSquared
quelle
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.

JF
quelle
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);
    }
});

Jim
quelle
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}

Rajan Snuriya
quelle
-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);
thamaht
quelle
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