Sostituire javascript confermare da confermare jquery

Io uso il seguente codice per utilizzare di default javascript confermare con jquery ui dialogo.

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

jQuery.confirm(
        "LogOut",
        "Do you want to log out",
        function() { 
        });

Ora ho bisogno di utilizzare questo codice stesso in una azione di disconnessione. In modo che io possa sostituire il javascript confermare il codice.

<a class="homeImage" onclick="return confirm('Do you want to logout?');" href="/future/myhome/head?$event=logout">LOG OUT</a>

Il problema che sto affrontando ora, quando ho sostituito lo conferma con un’altra funzione e attendere per il suo valore di ritorno per prendere la decisione, la finestra di dialogo non viene restituito il valore di una variabile. Queste due funzioni vengono eseguite contemporaneamente(mostrando il suo avviso, ma è anche arrivare diretto a href target). C’è un modo che il metodo può restituire un valore true o false, e quindi procedere a href target.

di riferimento: jQuery Estendere,jQuery UI di Ricambio per l’avviso

domanda correlata : js ignorare confermare

Il problema è che il jQuery.conferma() non restituisce nulla. E ‘ il pulsante funzioni che fanno.
So che, Così ho un ritorno vero e il falso “Ok” e “Cancel”, ancora non è il suo lavoro. Quindi come potrei modificare il mio codice per la restituzione di queste. questa è la mia domanda, mi puoi aiutare?

OriginaleL’autore arjuncc | 2013-10-15

3 Replies
  1. 2

    Il problema è che di default confirm finestra di dialogo è synchronus e bloccare l’intera interfaccia utente. JQuery finestra di dialogo è asincrona e non bloccare l’interfaccia utente (perché ne ha bisogno per eseguire il rendering).

    Quindi la risposta al tuo problema è il seguente. Hai bisogno di cambiare:

             buttons: {
                "Ok": function() {
                    window.location = "/future/myhome/head?$event=logout"
                },

    e

     <a class="homeImage" onclick="return jQuery.confirm('Do you want to logout?');return false;" href="/future/myhome/head?$event=logout">LOG OUT</a>
    grazie per le informazioni su ‘asincrono’ comportamento.

    OriginaleL’autore Piotr Stapp

  2. 4

    Non so se in realtà si potrebbe fare che il jQuery.dialog funzione asincrona.

    Si potrebbe utilizzare una promessa biblioteca per l’installazione del pulsante fare clic su eventi. Ma quindi non si può semplicemente specificare un metodo di onclick attributo e farlo tramite il codice

    var d = jQuery.Deferred();
    d.resolve(true); //resolve is used then to mark the function as complete
    return d.promise(); //return the promise

    jsFiddle

    jQuery.extend({
        confirm: function(message, title, okAction) {
            var d = jQuery.Deferred();
            jQuery("<div></div>").dialog({
                //Remove the closing 'X' from the dialog
                open: function(event, ui) { jQuery(".ui-dialog-titlebar-close").hide(); }, 
                buttons: {
                    "Ok": function() {
                        jQuery(this).dialog("close");
                        d.resolve(true);
                        return true;
                    },
                    "Cancel": function() {
                        jQuery(this).dialog("close");
                        d.resolve(false);
                        return false;
                    }
                },
                close: function(event, ui) { jQuery(this).remove(); },
                resizable: false,
                title: title,
                modal: true
            }).text(message);
            return d.promise();
        }
    });

    Per ulteriori informazioni su jQuery promessa libreria vedere jQuery riferimento

    Edit: un Altro modo per impostare il tutto: jsFiddle

    OriginaleL’autore LazyTarget

  3. 0

    Personalmente, io uso confermare di più per l’esecuzione condizionale di una funzione o di invio di un form…

    Così, usando il tuo esempio, io avrei fatto le seguenti modifiche:

    buttons: {
             "Ok": function() {
                  jQuery(this).dialog("close");
                  okAction();  
             },

    E quindi chiamato a Confermare come segue:

    onclick="jQuery.confirm('Do you want to logout?','Confirm:',function(){window.location='/future/myhome/head?$event=logout'}); return false;">LOG OUT</a>

    OriginaleL’autore Tony Carbone

Lascia un commento