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

问题解决了……

仅供参考 :显然这 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 (最新)
  • 歌剧: 34.0。* (最新)

示例代码(完整):

     Test...    
Take one
Take two
Take three
Take four
$(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); }); });

或者点击这里: https//jsfiddle.net/gu58wwtg/1/

最后编辑 :刚刚检查了其他可能性,如裸方法(纯JS,没有jQuery)和prompt('...'); (也以相反的顺序打开两次)而不是confirm('...'); 问题仍然存在,所以我怀疑是一个错误,对不起,打扰你,感谢你的关注。 我会保留这个问题,所以其他人可以节省一些挫折时间;)

我认为你应该使用.one

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

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

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

我使用类似你的代码,它的工作原理!

  

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