【问题标题】:Alert in jquery click is not stopping submitjquery click中的警报没有停止提交
【发布时间】:2011-04-20 22:02:35
【问题描述】:

我有

<input onclick="__doPostBack">

$(function(){ 
    $('input').click(function(){ alert('hey') }) 
});

例如,在 Chrome 中,我看到警报,然后单击“确定”浏览器提交。 在 FF4 中,我看到 milisec 警报,浏览器提交,无需等待我点击“确定”。

问题:发生了什么? FF4 有新的异步事件吗?

这不仅仅是警报的问题,preventDefault 也不起作用。

【问题讨论】:

    标签: jquery firefox cross-browser


    【解决方案1】:

    我没有对此进行测试,但我认为它可能会起作用。

    $('input').unbind('click').click(function{
        alert('Hey.');
        __doPostBack();
    });
    

    【讨论】:

      【解决方案2】:

      好吧,我们从来没有真正应该依赖像alert()comfirm() 这样的事件来真正停止代码的执行,只是碰巧大多数浏览器都是这样做的。

      话虽如此,我不知道为什么在FF4中会发生这种情况,但我的猜测是表单的提交事件实际上是在按钮的单击事件之前发生的。要尝试一下,请在表单的提交事件上发出警报,看看是否会停止提交。

      $('input').closest('form').submit(function() {
        alert('Hey');
      });
      

      【讨论】:

        【解决方案3】:

        Firefox 4 现在在页面对话框中使用;这减少了以前版本中模态对话框的烦恼。我假设这是一个 HTML/JavaScript 的东西,而不是基于操作系统的 GUI。如果您不想提交表单;您可以挂钩到表单的提交事件并返回 false。事实上,连接到表单的提交功能可能是您的最佳选择。希望对您有所帮助!

        【讨论】:

          【解决方案4】:

          警报框现在在 FF 中为 tab-modal,这意味着它们仅阻止当前页面而不是整个浏览器的访问(并冻结执行)。显然,这不会阻止加载不同的页面。

          尽管这是行为上的重大改变,但可以说是有道理的。

          根据您的上下文,您可以使用onbeforeunload event 向用户显示消息。但是,该对话框将始终有一个“确定”和一个“取消”按钮。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-10
            • 1970-01-01
            相关资源
            最近更新 更多