我认为这是由于移动浏览器的 300 毫秒延迟所致。
根据谷歌:
...移动浏览器将等待大约 300 毫秒
你点击按钮来触发点击事件。这样做的原因是
浏览器正在等待查看您是否真的在执行
双击。
我的一个客户项目遇到了同样的问题,为此我使用了https://github.com/ftlabs/fastclick 库来消除移动浏览器上物理点击和点击事件触发之间的 300 毫秒延迟。
你也可以试试https://github.com/dave1010/jquery-fast-click
在同一个项目中,我还遇到了下拉菜单的双击问题,这也是由于 300 毫秒的延迟。
双击问题出现在 Android 浏览器/设备中,因此我检测到了用户代理并应用了自定义函数来处理该问题,这可能对您有所帮助。
<?php
if (user_agent() == 'android') {
$handleClick = "onclick=\"checkClicks('$base_url/index.php')\"";
$homePage = "#";
} else {
$handleClick = " ";
$homePage = "index.php";
}
?>
<!--//Script to Handle menu for mobile devices-->
<script type="text/javascript">
//handle 300ms delay click in android devices
var clicks = 0;
function checkClicks(e) {
clicks = clicks + 1;
if (clicks == 2) {
window.location = e;
} else {
//do nothing
}
}
</script>
如果你遇到这个问题,你也可以尝试一些可用的插件来解决这个问题。
https://github.com/dachcom-digital/jquery-doubleTapToGo
https://github.com/zenopopovici/DoubleTapToGo
这也可能对您有所帮助。
已编辑
事件处理程序绑定到 DOM 树(在本例中为文档)更高层的元素,并且当事件到达该元素时执行,该元素源自与选择器匹配的元素。
这是可能的,因为大多数 DOM 事件从源点开始向上冒泡。如果单击#id 元素,则会生成一个单击事件,该事件将在所有祖先元素中冒泡(旁注:实际上在此之前有一个阶段,称为“捕获阶段”,当事件从树上下来时到目标)。您可以在这些祖先中的任何一个上捕获事件。
第二个示例将事件处理程序直接绑定到元素。事件仍然会冒泡(除非您在处理程序中阻止它),但由于处理程序绑定到目标,您将看不到此过程的效果。
通过委派事件处理程序,您可以确保对绑定时 DOM 中不存在的元素执行它。如果您的 #id 元素是在您的第二个示例之后创建的,则您的处理程序将永远不会执行。通过绑定到在执行时您知道肯定在 DOM 中的元素,您可以确保您的处理程序实际上会附加到某些东西,并且可以在以后适当地执行。
可能由于以下原因之一无法正常工作:
- 未使用最新版本的 jQuery
- 未将代码包装在 DOM 中准备就绪
- 或者您正在做的事情导致事件不会冒泡到文档上的侦听器。
要捕获在声明事件侦听器之后创建的元素上的事件 - 你应该绑定到父元素或层次结构中更高的元素。
例如:
$(document).ready(function() {
// This WILL work because we are listening on the 'document',
// for a click on an element with an ID of #test-element
$(document).on("click","#test-element",function() {
alert("click bound to document listening for #test-element");
});
// This will NOT work because there is no '#test-element' ... yet
$("#test-element").on("click",function() {
alert("click bound directly to #test-element");
});
// Create the dynamic element '#test-element'
$('body').append('<div id="test-element">Click mee</div>');
});
在本例中,只会触发“绑定到文档”警报。
JSFiddle with jQuery 1.9.1