2014-09-23 300 views
0

这是我正在试图做的....jConfirm不返回true或false

function myFunction() 
{ 
    var x=jConfirm('Can you confirm this?', 'Confirmation Dialog', function (r) { 
     y=r; 
     alert(y); 
    }); 

    alert(x); 
} 

为什么警报(x)的运行第一(我在JavaScript的初学者),并提醒“未定义”,当我按下确定后,它会提示“真”,而当我按下取消时会显示“错误”。

有什么办法可以让jConfirm返回true或false ...即x是trur还是false?

我正在使用jConfirm的“http://abeautifulsite.net/”插件。

+0

请参阅http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call。虽然这不是一个AJAX调用,但对于相同的解决方案来说,它本质上是一个问题。 – JJJ 2014-09-23 10:41:54

+0

是你预先定义的吗? – 2014-09-23 10:42:00

+0

@Orion没有任何区别。 – JJJ 2014-09-23 10:42:44

回答

0

jConfirm不创建alert框,它创建一个看起来像一个警告框的HTML元素。这里的重要区别在于,一个alert()框将停止Javascript执行,直到它关闭,因此alert(1); console.log(2);将首先警告,然后登录到控制台。由于jConfirm 不是使用alert(),如果您调用jConfirm(1, ...); console.log(2)它将显示确认框(HTML),然后在稍后写入控制台。

这样做的复杂的字版本是alert()同步 - 它锁定的脚本执行,直到您选择从警报东西。 jConfirm是异步,并且脚本执行继续独立于您的选择,直到您选择某个内容为止,此时它会触发回调函数。

+0

必须有一些使jConfirm同步的方法吗?实际上上面的代码并不是真正的问题..我有什么是删除图标,当用户点击删除时,jConfirm应该要求确认并根据选项应该执行点击操作。 – dividedbyzero 2014-09-23 10:48:47

+2

为什么必须有?它被写成是异步的,它不是你可以快速改变的东西。你可能不得不修改你的代码来处理回调,并使其成为事件驱动的**(谷歌它)。您必须创建一个名为'deleteRow'(或类似的东西)的函数,并在jConfirm回调中调用它,如果它们单击了“是”。 – Joe 2014-09-23 10:51:42

+0

为什么不能将操作代码放在回调函数中?这就是它的意思。 – JJJ 2014-09-23 10:57:50