大佬教程收集整理的这篇文章主要介绍了jquery – 仍然触发2个不同项目的双击事件,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到的问题是,当快速单击第二个列表中的项目时,双击事件将触发,尽管没有单击相同的项目.
https://jsfiddle.net/9afn4s7q/
$('.item').dblclick(function () { $(this).detach(); $('#list2').append($(this)); $(this).click(function () { $(this).detach(); $('#list1').append($(this)); }); });
如何在单击不同项目时停止触发双击事件?
@H_419_4@
换句话说,当单击第二个列表中的项目时,第二个单击事件将与dbclick事件几乎同时触发.要解决此问题,您可以比较事件时间戳,以确定第二次单击事件是否在附加后触发了dbclick事件.
在下面的示例中,每次触发click事件时都会更新lastClicktimestamp变量.为了防止您看到的奇怪行为,将检查是否在触发dbclick事件之前触发了最后一次单击.
var lastClicktimestamp = 0; $('#list1').on('dblclick','.item',function(event) { if (event.timestamp > lastClicktimestamp) { $('#list2').append(this); } }); $('#list2').on('click',function(event) { lastClicktimestamp = event.timestamp + 100; $('#list1').append(this); });
附注:
>我@L_874_11@了100毫秒来考虑潜在的时间戳近似值.事件时间戳可能只变化1毫秒.
>我使用事件委托以避免嵌套事件侦听器(尽管您已经意识到这一点).
>由于您使用的是jQuery 1.6.4版,因此您将使用.delegate()方法而不是.on()方法.
正如我在评论中指出的那样,您也可以延迟将元素附加到第一个列表.这样做时,不会触发委派的dbclick事件.
$('#list1').on('dblclick',function(event) { $('#list2').append(this); }); $('#list2').on('click',function(event) { setTimeout(function () { $('#list1').append(this); }.bind(this),5); });
我觉得这两种解决方案都相对苛刻,但它们似乎都有效.
@H_419_4@ @H_419_4@以上是大佬教程为你收集整理的jquery – 仍然触发2个不同项目的双击事件全部内容,希望文章能够帮你解决jquery – 仍然触发2个不同项目的双击事件所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。