Javascript direct confirm()函数替换

Javascript direct confirm()函数替换,javascript,confirm,Javascript,Confirm,我想替换Javascript confirm()函数以允许自定义按钮,而不是Yes/Cancel。我尝试过搜索,但所有的解决方案都是事件驱动的,比如jquerydialog(代码不等待响应,而是事件驱动的)。有人知道非事件驱动的解决方案吗。它必须在Safari和IE中工作(因此没有vbscript) 下面是我系统中许多部分的示例代码。这是旧代码,设计时没有考虑事件驱动窗口。我试图避免重写 ** // Wait for users response if (result>2000) {

我想替换Javascript confirm()函数以允许自定义按钮,而不是Yes/Cancel。我尝试过搜索,但所有的解决方案都是事件驱动的,比如jquerydialog(代码不等待响应,而是事件驱动的)。有人知道非事件驱动的解决方案吗。它必须在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方法模拟

更好的解决方案是为异步执行构造代码。这几乎总是一个更好的主意——首先,它让您决定对话框的外观、按钮等;其次,它不会阻止用户。他们可能有需要在另一个选项卡或页面上的其他位置双击打开的重要信息。通过
确认
他们必须先回答你的问题,然后才能到达这些地方

下面是代码的一个片段。这里有很多空白位,但这可能会让您走上正确的轨道:

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

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

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

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

  • 不幸的是,即使是你的代码也无法使用;不行。没有阻塞/等待。我想我很惊讶这种简单类型的函数在浏览器中没有更广泛的应用。然而,它们有confirm()和alert(),但无法对它们进行一点自定义。我想和其他人一样,我也被罐装的confirm()卡住了,或者开始重写……你在说什么按钮?一个是确认对话框,没有点击事件。。。什么?因此,您的建议是1)创建一个按钮2)用onclick属性覆盖其默认行为(没有)3)在javascript中查找元素4)删除其onclick属性并替换它添加一些其他事件处理程序,5)调用原始事件处理程序(只返回false)?这不仅是非常冗长的,它没有实现任何像询问者所希望的那样的阻塞,而且可能不起作用(如果您将onclick处理程序添加为字符串,那么,您不能调用字符串),为什么您认为我不冷静?我试图1)理解你的建议本身,因为我目前的理解表明这个答案有点冗长2)理解它是如何回答这个问题的,因为在我看来它不是。你能反驳我之前的观点吗?或者为什么你认为直接从javascript附加一个事件处理程序的方法不能达到添加一个额外的临时事件处理程序的效果,而临时事件处理程序除了试图阻止默认操作之外什么都不做?我认为一个代码示例可以澄清我的大部分疑问;你能发布一个你的建议是什么意思的代码示例吗?最值得注意的是,我看不到任何行为会阻止在同一函数中执行进一步的代码,这就是询问者所说的“替换
    确认
    我说的“uhh…”。。。什么?“我想要一些东西来掩盖。我不知道这怎么表明我很生气。如果这对你有效,要么你和询问者有不同的问题,要么我误解了你的建议,要么我误解了询问者的问题(还有其他三个答案)如果是第一个,那么这个答案就不属于这里。如果是后两个,你能纠正我的误解,或者至少说出哪一个是正确的吗?