gpt4 book ai didi

jquery - 触摸事件触发两次

转载 作者:行者123 更新时间:2023-12-03 22:29:24 26 4
gpt4 key购买 nike

我在移动设备/平板电脑上遇到问题,事件触发了两次。当我单击以下功能时,应该下拉的菜单将下拉然后立即向上滑动。这只是触摸设备的问题。

$(document).on("touchend click", ".lines-button", function(e){

e.stopImmediatePropagation();
if($(this).hasClass("close")){
$(this).removeClass("close");
$(".widget1x1Back").next(".actionsHolder3").slideUp("fast", function() {
$(this).remove();
});
}else{

var iconsList = $(this).closest(".top1x1").next(".hdnActnLst").find(".iconsHolder3").html();
$(this).closest(".widget1x1").append(iconsList);
$(this).closest(".widget1x1").find(".actionsHolder3").hide();
$(this).closest(".widget1x1").find(".actionsHolder3").slideDown(700,"easeOutBack");
$(this).addClass("close");
}
});

任何意见都会很棒,谢谢!!

最佳答案

您的问题是您的函数被触发两次(每种事件类型一次)。请参阅DEMO这里(我使用了mousedownclick,因为我现在在桌面上 - 但其原理相同)

您需要捕获并处理对事件的重复调用。您可以尝试设置一个已处理的 bool 值,以便 click 事件知道 touch 事件是否处理该事件(触摸事件应该首先触发)。像这样的事情...

var handled = false;
$(document).on("touchend click", ".lines-button", function(e){
e.stopImmediatePropagation();

if(e.type == "touchend") {
handled = true;
handleIt();
}
else if(e.type == "click" && !handled) {
handleIt();
}
else {
handled = false;
}
});

function handleIt() {
if($(this).hasClass("close")){
$(this).removeClass("close");
$(".widget1x1Back").next(".actionsHolder3").slideUp("fast", function() {
$(this).remove();
});
}else{

var iconsList = $(this).closest(".top1x1").next(".hdnActnLst").find(".iconsHolder3").html();
$(this).closest(".widget1x1").append(iconsList);
$(this).closest(".widget1x1").find(".actionsHolder3").hide();
$(this).closest(".widget1x1").find(".actionsHolder3").slideDown(700,"easeOutBack");
$(this).addClass("close");
}
}

关于jquery - 触摸事件触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25165360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com