单击JavaScript / jQuery,确认触发两次

时间:2016-01-28 12:21:55

标签: javascript jquery google-chrome

问题解决了......

仅供参考:显然 Mac OS或Chromium引擎错误,因为在上一次系统和浏览器更新问题突然消失之后。看起来 与jQuery或JavaScript API无关。

我会将此问题保留几天,之后我会将其删除,因为在这种情况下它不符合StackOverflow规则。

原帖:

我在点击监听器中有简单的JS确认,就像下面的代码一样,没有更多的请求(即AJAX,没有重复的JS包括等等......)。

问题是在某些浏览器(即Mac OS中的Chrome和Opera)中确认对话框已经两次,我的问题是,我是否错过了一些明显的或者是上述浏览器的相当大的错误?是否有任何解决方法可以帮助我防止这种情况发生?也尝试了e.preventDefault();也没有运气。

修改我还应该提一下,如果点击中没有confirm('...');,它只会被解雇一次(所以只有一个让我们在控制台中检查...... )。确认两个日志在控制台中出现两次,但布尔值与点击相反 - 对于样本 - 如果我先点击Cancel,再点击OK控制台日志true首先和最后false ......非常奇怪:S

版本:

  • jQuery版本: 1.11.3 - 1.12.0
  • Chrome: 47.0.x (最新)
  • Opera: 34.0。* (最新)

示例代码(完整):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test...</title>
    <script src="http://code.jquery.com/jquery-1.12.0.min.js"></script>
</head>
<body>

    <div class="myBtn" data-field="one">Take one</div>
    <div class="myBtn" data-field="two">Take two</div>
    <div class="myBtn" data-field="three">Take three</div>
    <div class="myBtn" data-field="four">Take four</div>

    <script>
        $(document).ready(function () {
            $(document).on('click', '.myBtn', function () {
                console.log('Let us check...');
                var confirmation = confirm('Are you sure you want ' + $(this).data('field') + '?');
                console.log(confirmation);
            });
        });
    </script>

</body>
</html>

或者只需点击此处:https://jsfiddle.net/gu58wwtg/1/

上次修改:刚刚检查了其他可能性,例如裸方法(使用纯JS,没有jQuery)以及prompt('...');(也按逆序打开两次)而不是{{1}问题仍然存在,所以我怀疑是一个错误,抱歉,打扰你,感谢你的关注。我会保留这个问题,所以其他人可以节省一些挫折时间;)

2 个答案:

答案 0 :(得分:0)

我认为你应该使用.one

$(document).one('click', '.myBtn', function () {
  

说明 .one()将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序。

答案 1 :(得分:0)

尝试在Chrome设置中清除缓存以及文件历史记录然后关闭浏览器。 然后再试一次。

我使用与您类似的代码并且它有效!

UINavigationBar

它会发射一个!这是铬。我不确定这是一个错误。这可能是chrome存储它的方式。 但是我没有在Mac上使用Opera(因为,我没有Mac)