Javascript直接confirm()函数替换

时间:2011-11-14 20:58:26

标签: javascript confirm

我想替换Javascript confirm()函数以允许自定义按钮而不是Yes / Cancel。我尝试搜索,但所有解决方案都是事件驱动的,例如jquery对话框(代码不等待响应,但它是事件驱动的)。有没有人知道非事件驱动的解决方案。它必须在Safari和IE中工作(所以没有vbscript)。

以下是我系统许多部分的示例代码。这是旧代码,并未考虑事件驱动窗口。我试图避免重写。

**


// Wait for users response
if (result>2000) {
    if (confirm("Are you sure this is right?")){

       ... do stuff

    } 
 }
 ... continue with other stuff
 ... lots of other code.

 if (confirm("Did you double check your numbers?")){

       ... do more stuff

 } else {
      ... do something
 }

**

4 个答案:

答案 0 :(得分:6)

像其他人所说的那样,这是不可能的。 confirm是一个阻塞函数 - 在用户解除对话框之前不再执行脚本 - 并且您无法使用其他Javascript方法进行模拟。

更好的解决方案是构建用于异步执行的代码。这几乎总是一个更好的主意 - 首先,它可以让你决定你的对话框应该是什么样子,有什么按钮等等;第二,它不会阻止用户。他们可能拥有在另一个选项卡或页面上的其他位置仔细检查打开所需的重要信息。使用confirm他们必须回答您的问题才能到达其中任何一个地方。

以下是代码可能的样子片段。这里有很多空白位,但它可能会让你走上正轨:

if (result>2000) {
    displayConfirm("Are you sure this is right?", {
        "Yes": function () {
            // ... do stuff
        },
        "No": function () {
            // do.. nothing? up to you.
        }
    } 
}

你会在这里看到定义了两个函数,但实际上都没有执行。 displayConfirm函数必须构造一个对话框(以任何方式)然后创建按钮,使用这些函数作为点击处理程序(或者至少从点击处理程序调用它们)。

答案 1 :(得分:1)

你要做的事是不可能的。您必须使用事件驱动的自定义对话框解决方案,或坚持使用浏览器默认确认对话框。

答案 2 :(得分:0)

如果不改变通话,您将无法执行此操作。没有自定义代码可以像confirm框那样停止执行。任何解决方案都需要编辑代码到事件模型。

答案 3 :(得分:-4)

正如其他人所说,你不能直接做到这一点,但我设法在一个回合中做到了。假设像我这样你有一个提交表单的HTML按钮,并希望该按钮有一个jQuery模式对话框......

  1. 向HTML按钮添加onclick事件
  2. 使onlick事件打开一个jQueryUI对话框,让onclick事件返回false以取消按钮的默认操作
  3. 在您的jQueryUI对话框中,获取Yes / Ok按钮以从步骤1中的按钮中删除onclick事件,然后调用然后触发按钮以触发click事件