【发布时间】:2016-05-05 19:42:29
【问题描述】:
问题自行解决了...
仅供参考:显然 是 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('...');(也以相反的顺序打开两次)而不是 confirm('...');,问题仍然存在发生了,所以我怀疑是一个错误,对不起,打扰你了,感谢你的关注。我会保留这个问题,这样其他人可以节省一些时间来解决挫折;)
【问题讨论】:
-
如果元素不是动态生成的,您不必委托事件。
-
@Jai,使用委托没有害处,无法在 Chrome 版本 48.0.2564 上重现该问题
-
@Satpal 刚刚提到,如果元素是静态的,则不需要。
-
无法复现,但你可以尝试一个api,api.jquery.com/one
-
@biesior 是的,在处理程序中使用任何模式时,关于旧 webkit 引擎和焦点事件被触发两次的旧错误。我怀疑这是同一种错误。你应该向铬团队报告。也许这与使用 WKWebView 的最新更新有关。出于测试目的,我会尝试使用
mouseup事件而不是委托事件,并且可能检查event.target,也许等等......
标签: javascript jquery google-chrome