如何使用jQuery将同一处理程序绑定到多个事件
只是想知道是否有办法简化以下脚本…感谢您的帮助如何使用jQuery将同一处理程序绑定到多个事件,jquery,Jquery,只是想知道是否有办法简化以下脚本…感谢您的帮助 $('#right-arrow').live('click', function(){ removt(); callAjaxToCheck(); show = true; }) $('#tab').click(function(){ removeTut(); callAjaxToCheck(); show = true; }) $('left-arrow').live('cli
$('#right-arrow').live('click', function(){
removt();
callAjaxToCheck();
show = true;
})
$('#tab').click(function(){
removeTut();
callAjaxToCheck();
show = true;
})
$('left-arrow').live('click', function(){
removeT();
callAjaxToCheck();
show = true;
})
使用:
将
.live()
更改为。从jQuery版本1.7+开始,live()
已被弃用。如果您运行的是较旧版本的jQuery,请不要更改.live()
始终在代码中包含分号。(在}行之后缺少分号)
行
我认为最干净的方法是创建一个单独的函数:
function doStuff() {
removeTut();
callAjaxToCheck();
showTutorial = true;
}
$('#eplanner-view-range-right-arrow').live('click', doStuff);
$('#lesson-search-tab').click(doStuff);
$('#eplanner-view-range-left-arrow').live('click', doStuff);
当然,您应该使用比
doStuff
更具描述性的函数名。我没有看到if
语句。编辑标题可以更好地显示问题的意图,并帮助其他人搜索此类建议。这可能不完全相同.live
授权了事件,但实际上没有。。既然还没有delegation@wirey在我再次编辑并重写了一些内容后犯了一个错误,现在应该可以了。对.live
的调用对所有元素使用委托事件,而原始代码没有。s/he希望在某些情况下绑定到live,然后在其他情况下单击。@invertdspear:但是因为它们都是ID(因此是唯一的),可以将它们全部委托。@jnylen:在这种情况下没有区别。doStuff是一个完全合法的函数名,所以它是foo()、blah()和jfdklsfjaksdf()@这些都是糟糕的函数名。是的,它们在技术上是合法的,但仅仅根据技术上合法的内容做出这些决定是一个被证明的错误。
var func = function() {
"use strict";
removeTut();
callAjaxToCheck();
showTutorial = true;
};
$("#parent").on("click", "#eplanner-view-range-right-arrow, #eplanner-view-range-left-arrow", func);
$("#lesson-search-tab").click(func);
function doStuff() {
removeTut();
callAjaxToCheck();
showTutorial = true;
}
$('#eplanner-view-range-right-arrow').live('click', doStuff);
$('#lesson-search-tab').click(doStuff);
$('#eplanner-view-range-left-arrow').live('click', doStuff);