Javascript直接确认()函数替换

Javascript direct confirm() function replacement

本文关键字:函数 替换 确认 Javascript      更新时间:2023-09-26

我想替换Javascript确认()函数,以允许自定义按钮而不是是/取消。我试着搜索,但所有的解决方案是事件驱动,如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
 }
* *

就像其他人说的,这是不可能的。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函数必须构造一个对话框(以任何方式),然后创建按钮,使用这些函数作为单击处理程序(或至少从单击处理程序调用它们)。

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

如果不更改调用,您将无法做到这一点。没有任何自定义代码可以像confirm盒子那样停止执行。任何解决方案都需要编辑事件模型的代码。

正如其他人提到的那样,你不能直接做,但我设法以一种迂回的方式做了。假设像我一样,你有一个HTML按钮提交表单,并希望该按钮有一个jQuery模态对话框…

  1. 为HTML按钮添加onclick事件
  2. 使onclick事件打开一个jQueryUI对话框,并使onclick事件返回false以取消按钮的默认动作
  3. 在你的jQueryUI对话框中,获得Yes/Ok按钮来移除步骤1中按钮的onclick事件,然后调用并触发按钮来触发click事件