如何同步jQuery对话框,就像Javascript的alert()一样

时间:2011-08-05 05:52:52

标签: javascript jquery

我目前正在开发自定义对话框,以便与我的应用程序一起使用jQuery。问题是创建对话框的调用是异步的,即在显示之前执行的代码行。这就是我所做的,我创建了一个函数DisplayConfirm(),当调用它时会创建一个模态对话框。我想像下面这样使用它:

if(DisplayConfirm()){
//do this
else
// do that

但我不能,因为DisplayConfirm()之后编写的代码行是在创建对话框之前执行的。如何同步此操作以便我不必使用回调函数?

3 个答案:

答案 0 :(得分:2)

为什么要避免回调?它们很整洁:)

function displayConfirm(confirmStr, okCallback, cancelCallback) {
    $('<div class=alert />')
        .append('<p>' + confirmStr + '</p>')
        .append('<button class=ok-btn>Ok</button>')
        .append('<button class=cancel-btn>Cancel</button>')
        .appendTo(document.body)
        .delegate('.ok-btn', 'click', function (e) {
            okCallback(e);
        })
        .delegate('.cancel-btn', 'click', function (e) {
            cancelCallback(e);
        });
}

有!你看,也不错:)

注意:我只是从脑海中写下这个。尚未测试过。

编辑:如果这还不够清楚,我建议您使用回调,除非您想使用原生confirm功能,就像@PaulPRO一样在对该问题的评论中说明。

如上所述定义了displayConfirm函数,你可以将它与回调一样使用,

displayConfirm('Are you sure?', function (e) {
    // do if confirmed
}, function (e) {
    // do if not confirmed
});

我想说明编写像函数这样的简单回调确实不是很难,你应该这样做。

如果仍然不清楚,请告诉我。

答案 1 :(得分:2)

您无法在与用户交互的javascript中编写函数阻止javascript解释器。 confirm可以做到这一点,因为它是一个内置的浏览器,用C ++(或其他)编写。

答案 2 :(得分:0)

使用替代选项, 创建一个在User生成某个事件后执行的函数。 并调用一个对话框事件,让你有同样的行为。

离。 $( “#对话框的模式”)。对话框({                                         可调整大小:false,                                         宽度:350,                                         莫代尔:是的,                                         纽扣: [{                                                     文字: “OK”,                                                     宽度:80,                                                     高度:26,                                                     点击:功能()                                                       {                                                         $(本).dialog( “亲密”);                                                       }                                               }                                             ]                                 });