jQuery确认框暂停脚本执行

8
我正在寻找一个漂亮的jQuery替代标准对话框。jQUery UI有一个不错的,但它不像confirm()一样暂停脚本执行以等待响应。下面的演示应该显示两个div,显示前面确认框的选择,但是jquery对话框框不会导致脚本等待。

http://jsfiddle.net/EvilAmarant7x/r7Ur5/

我需要一个能让脚本暂停的东西。
谢谢。
2个回答

10

你的使用方法有误

应该像这样做

 $("#dialog-confirm").dialog({
resizable: false,
height: 140,
modal: true,
buttons: {
    Proceed: function() {
          call_true_function();
        $(this).dialog("close");
    },
    Cancel: function() {
        call_false_function()
        $(this).dialog("close");
    }
}
});

或类似的东西

**编辑**

所以像这样?

count = 0;
$("#dialog-confirm").dialog({
resizable: false,
height: 140,
modal: true,
buttons: {
    Proceed: function() {
          proceed();
        $(this).dialog("close");
    },
    Cancel: function() {
        $(this).dialog("close");
    }
}
});

function proceed(){
    if (count < 10){
        count++;
        $("#dialog-confirm").dialog('open');    
    }else{
        $('body').append("<div>Yes was selected " + count + " times!</div>");
    }
}

虽然我知道这是对话框应该使用的方式,但这种实现方式并不适合让用户回答一系列问题,然后根据总体响应执行某些操作。或者我可能只是忽略了什么。至少我想不到一种方法,除非像让回调函数成为Call_Question_N+1()这样的东西,从而创建对话框系列中的下一个。这似乎是一个钝化的解决方案,对于通常像这样实现的东西来说。 - EvilAmarant7x
1
@EvilAmarant7x,确实如此,但不幸的是这就是事物的本质。你不能仅仅停止JavaScript执行。在JavaScript中没有暂停、睡眠或等待功能。你所能做的最好的办法就是使用委托或事件回调。有一些方法可以使长串问题看起来更好,但从根本上讲,它们都在做同样的事情。 - Paul
1
我想补充一点,长串的是/否问题可能也不是最好的界面设计选择。例如,用户很可能会意外地重复给出相同的答案,或者不记得或看不到他们刚刚回答了什么。如果你有几个是/否问题要问,可以尝试使用带单选按钮的jQuery模态框。 - Paul
请注意,在第二个示例中,您可以在每次打开对话框之前更改对话框的内容。 - mcgrailm

10

如果您使用自定义的确认/模态窗口,很遗憾这是不可能的。您将不得不使用回调函数或选择使用自1.5版本引入的新的延迟对象

使用延迟对象的代码如下:

var dfd = new $.Deferred();
$("#dialog-confirm").dialog({
  resizable: false,
  height: 140,
  modal: true,
  buttons: {
    Proceed: function() {
        dfd.resolve('Success!');
        $(this).dialog("close");
    },
    Cancel: function() {
        dfd.reject('Uh-oh!');
        $(this).dialog("close");
    }
  }
});

dfd.then(function() {
  // perform next action when user clicks proceed
});

dfd.fail(function() {
  // perform some action when the user clicks cancel
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接