Javascript 尝试使用jqueryoff方法删除mouseleave
我有一个按钮数组,我想删除该按钮单击后的侦听器。下面是我如何努力做到这一点的 JS:Javascript 尝试使用jqueryoff方法删除mouseleave,javascript,jquery,html,Javascript,Jquery,Html,我有一个按钮数组,我想删除该按钮单击后的侦听器。下面是我如何努力做到这一点的 JS: 我认为任何关闭方法都不适合我,只是不确定原因。jQuery事件委派要求使用相同的选择器打开和关闭事件侦听器。换句话说,您不能仅在一个元素上关闭委派事件侦听器 要解决此问题,需要关闭事件侦听器,然后使用将排除所选元素的选择器将其重新打开。在这种情况下,我们有您的类“selected”。因此,我更新了您的鼠标输入/离开选择器,使其包含:not(.selected) 这里是一个例子——fiddle有几行额外的代码(注
我认为任何关闭方法都不适合我,只是不确定原因。jQuery事件委派要求使用相同的选择器打开和关闭事件侦听器。换句话说,您不能仅在一个元素上关闭委派事件侦听器 要解决此问题,需要关闭事件侦听器,然后使用将排除所选元素的选择器将其重新打开。在这种情况下,我们有您的类“selected”。因此,我更新了您的鼠标输入/离开选择器,使其包含:not(.selected) 这里是一个例子——fiddle有几行额外的代码(注释)来帮助可视化javascript
var currentBtn;
var selectedBtn = $("#moto-menu a");
function arrowEnter(){
TweenMax.to($(this).children('img'),0.5,{alpha:1, left: -5});
}
function arrowLeave(){
TweenMax.to($(this).children('img'),0.25,{alpha:0, left: -10});
}
function setMouseEnterLeaveListeners() {
var eventsSelector = '#moto-menu a:not(.selected)';
$("body").off( "mouseenter", eventsSelector, arrowEnter);
$("body").off( "mouseleave", eventsSelector, arrowLeave);
$("body").on( "mouseenter", eventsSelector, arrowEnter);
$("body").on( "mouseleave", eventsSelector, arrowLeave);
}
function arrowClick(evt){
// if there is a class to remove, remove it
if (currentBtn) {
$(currentBtn).removeClass("selected");
}
currentBtn = this;
$(currentBtn).addClass("selected");
// remove the listener from this button
setMouseEnterLeaveListeners()
}
// Moto menu rollover animation
setMouseEnterLeaveListeners()
$("body").on( "click", "#moto-menu a", arrowClick);
当您删除侦听器时,是否有理由以字符串形式传入
currentBtn
?另外,您不能检查$(this)
对象是否为currentBtn
,如果是,则不执行该操作吗?似乎一旦它们被取消选中,arrowEnter&arrowLeave函数应该再次激活?不能这样做off()
。。只需在事件处理程序中检查类即可。@Charlietfl-谢谢!我甚至没有想过要这么做。也可以在箭头中循环索引,单击以获得$(currentBtn)
,因为它与$(此)
相同,可以将整个内容缩减为$(“#moto menu a.selected”)。removeClass('selected')$(此).addClass('selected')
var currentBtn;
var selectedBtn = $("#moto-menu a");
function arrowEnter(){
TweenMax.to($(this).children('img'),0.5,{alpha:1, left: -5});
}
function arrowLeave(){
TweenMax.to($(this).children('img'),0.25,{alpha:0, left: -10});
}
function setMouseEnterLeaveListeners() {
var eventsSelector = '#moto-menu a:not(.selected)';
$("body").off( "mouseenter", eventsSelector, arrowEnter);
$("body").off( "mouseleave", eventsSelector, arrowLeave);
$("body").on( "mouseenter", eventsSelector, arrowEnter);
$("body").on( "mouseleave", eventsSelector, arrowLeave);
}
function arrowClick(evt){
// if there is a class to remove, remove it
if (currentBtn) {
$(currentBtn).removeClass("selected");
}
currentBtn = this;
$(currentBtn).addClass("selected");
// remove the listener from this button
setMouseEnterLeaveListeners()
}
// Moto menu rollover animation
setMouseEnterLeaveListeners()
$("body").on( "click", "#moto-menu a", arrowClick);