Как вернуть true или false из диалогового окна подтверждения нот jQuery

У меня есть кнопка ссылки внутри повторителя, как это:

<asp:LinkButton ID="lnkDelete" runat="server" CommandName="delete" OnClientClick='javascript:return showConfirm("Are you sure you want to delete?")'
                                    CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ReasonId") %>'>Delete</asp:LinkButton>

и я использую плагин нотный JQuery, чтобы показать подтверждение, когда пользователь нажимает на удаление.

showConfirm() функция такая:

function showConfirm(message) {
    var n = noty({
        text: message, //'Are you sure?',
        type: 'confirm',
        dismissQueue: false,
        layout: 'center',
        theme: 'defaultTheme'
        , buttons:
            [{
                addClass: 'btn btn-primary', text: 'Ok', onClick: function ($noty) {
                    $noty.close(); return true;
                }
            },
            {
                addClass: 'btn btn-danger', text: 'Cancel', onClick: function ($noty) {
                    $noty.close(); return false
                }
            }]
    })

}

Но это не вернется true или же false, Как я могу вернуться true или же false при нажатии на ok или же cancel кнопка.?

5 ответов

Аналогично первому ответу, но управление отсрочкой немного по-другому, что для меня более интуитивно понятно.

function showConfirm(msg) {
        var self = this;
        self.dfd = $.Deferred();
        var n = noty({
            text: msg,
            type: 'confirm',
            dismissQueue: false,
            layout: 'center',
            theme: 'defaultTheme'
            , modal: true
            , buttons:
                [{
                    addClass: 'btn btn-primary', text: 'Ok', onClick: function ($noty) {                            
                        $noty.close();
                        self.dfd.resolve(true);
                    }
                },
                {
                    addClass: 'btn btn-danger', text: 'Cancel', onClick: function ($noty) {
                        $noty.close();
                        self.dfd.resolve(false);
                    }
                }]
        })

        return self.dfd.promise();
    }

Тогда мы можем использовать...

showConfirm("Confirm your action?").then(function (status) {
            // status is true or false
        });

Вы не можете вернуться true или же false как вы хотите, потому что на самом деле это не "настоящий модальный диалог", который заставляет браузер или любое другое окно ждать возврата.

Единственный диалог браузера, который может сделать это, используя JavaScript, это confirm Диалог.

dialog вы используете фактически один div, который открывается на вашей странице и показывает сообщение, неспособное удержать сообщение обратно из вашего элемента управления вводом. В качестве альтернативы вы можете создать ее так, чтобы она открывалась, а в случае "Да" - для перенаправления на страницу, которую вы хотите, но ссылка, которая вызывает ее, должна только открывать ее.

function deleteFinance(ItemID, btn) {
            noty({
                text: 'are you sure of delete Item?', buttons: [{
                    addClass: 'btn btn-primary', text: 'yes',
                    onClick: function ($noty) {
                        $noty.close();
                        deleteFinance2(ItemID, btn);
                    }
                }, {
                    addClass: 'btn btn-danger', text: 'Cancel',
                    onClick: function ($noty) {
                        $noty.close();
                    }
                }]
               , layout: 'center'
            });
        }

используйте Jquery $.Deferred.

var status = false;
var defer = new $.deferred();
defer.progress(function(status) {
  status = status;
  if ( status != undefined ) {
    defer.resolver();
    if ( !status ) {
      return false;
    } else {
      return true;
    }
  }
});
var confirm = showConfirm("Are you sure you want to delete?", defer);

и.. функция ноти

function showConfirm(message, defer) {
var _self = this;
var status = undefined;
var n = noty({
    text: message, //'Are you sure?',
    type: 'confirm',
    dismissQueue: false,
    layout: 'center',
    theme: 'defaultTheme'
    , modal: true
    , buttons:
        [{
            addClass: 'btn btn-primary', text: 'Ok', onClick: function ($noty) {
                _self.status = true;
                $noty.close();
                // return true;
                defer.notify(_self.status);
            }
        },
        {
            addClass: 'btn btn-danger', text: 'Cancel', onClick: function ($noty) {

                $noty.close();
                // return false
                defer.notify(_self.status);
            }
        }]
    })
}

конец;

Вот пара полезных функций, которые я написал для Ноти. в этой версии ожидается использование библиотеки animate.css и основы, однако она будет работать с начальной загрузкой, пока вы замените классы css для кнопок на классы для начальной загрузки. Имейте в виду, что эта функция предназначена для работы с глобальными функциями пространства имен, поскольку они технически являются просто методами объекта окна. если вам нужно использовать функции пользовательского объекта, измените окно на имя вашего объекта в строке с надписью "вот где происходит магия"

//shows a noty alert message. _m is the message to display, _t is the type(error etc)
function alertHandle(_m,_t){
    noty({
        text: _m,
        type:_t,
        layout:'topCenter',
        animation: {
        open: 'animated pulse',
        close: 'animated flipOutX',
    }
    });
}

//noty confirm dialogue with callback function.
/*
_text = text of message to display 
confirmCB = callback function to call if user clicks continue.
args = args to pass to callback function . could be whatever you want it to be.
*/
function confirmModal(_text,confirmCB,args){
    noty({
        text: _text,
        layout: 'center',
        buttons: [
            {addClass: 'button success tiny radius no-margin', text: 'Continue', onClick: function($noty) {
                    $noty.close();
                    window[confirmCB].call(false,args); // heres where the magic happens.
                }
            },
            {addClass: 'button alert tiny radius no-margin', text: 'Cancel', onClick: function($noty) {
                    $noty.close();
                    alertHandle('the action was cancelled','information');
                }
            }
        ]
    });
}
Другие вопросы по тегам