当我dblclick时,它运行.click两次

单击某个项目时,我有2个函数,.click和.dblclick问题是,当你进行dblclick时,它会运行.click函数两次。 有没有办法来解决这个问题?

$(".item").click(function() { if (price[this.id] === 1) { consoleUpdate("This item is worth " +price[this.id]+ " coin"); } } $("#fishItem").unbind("dblclick").bind("dblclick").dblclick(function() { coins = coins+1; coinUpdate(); invFish1--; if (invFish1 === 0) { $("#fishItem").appendTo("#itemStage"); } }); 

根据dblclick事件的jQuery文档:

将处理程序绑定到同一元素的click和dblclick事件是不可取的。 触发的事件序列因浏览器而异,有些事件在dblclick之前接收到两个点击事件,而其他事件只有一个。 双击敏感度(双击检测到的点击之间的最长时间)可能因操作系统和浏览器而异,通常可由用户配置。

您想要更改事件,以便在同一元素上没有.dblclick.dblclick

http://api.jquery.com/dblclick/

正如其他人提到的,你无法将点击和双击同时绑定到同一个项目。 但是,有一些解决方法。

处理此问题的一种方法是处理点击代码,然后检查双击:

 var lastClickTime = 0; $(".item").click(function() { var thisClickTime = (new Date).getTime(); if (thisClickTime - lastClickTime < 500) { //Double-click } else { //Click } lastClickTime = thisClickTime; }); 

此代码实际上捕获“最后单击时间”,如果此单击时间距离上次单击时间小于500毫秒,则会触发双击代码。 否则它将触发点击代码。

这样做的缺点是首先调用点击代码,然后双击代码。 此外,您强制用户进行500ms双击。 虽然这是非常标准的,但并不能保证。 (较慢的答题器可能有问题。)

一个演示这种技术的JSFiddle 。


您可以通过为点击代码设置500毫秒超时来改进此代码,然后在触发双击时取消点击事件。 这样做的缺点是它会在点击和“点击”代码之间产生500毫秒的延迟。

一个演示超时的JSFiddle 。

 var cnt=1; $( "#target" ).click(function(e) { if(cnt==1) { // action on single click if you dont want anything in in single click then use here e.preventDefault(); }else{ // work on double click cnt=1;// again set counter } cnt++; }); 

参考e.preventDefault();