我目前正在开发自定义对话框,以便与我的应用程序一起使用jQuery。问题是创建对话框的调用是异步的,即在显示之前执行的代码行。这就是我所做的,我创建了一个函数DisplayConfirm(),当调用它时会创建一个模态对话框。我想像下面这样使用它:
if(DisplayConfirm()){
//do this
else
// do that
但我不能,因为DisplayConfirm()之后编写的代码行是在创建对话框之前执行的。如何同步此操作以便我不必使用回调函数?
答案 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( “亲密”); } } ] });