2012-08-24 91 views
2

想知道是否有方法来简化以下脚本...感谢您的帮助。如何使用jQuery将相同的处理程序绑定到多个事件

$('#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; 
}) 
+5

我没有看到“if”语句。 – Hassan

+0

标题编辑,以更好地显示问题的意图,以及帮助其他人寻找这样的建议。 – invertedSpear

回答

6

总是在代码中包含分号。(你在})行之后错过了它们)。

我认为这样做最彻底的方法是做一个单独的函数:

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

+0

doStuff是一个完全合法的函数名称,所以它foo(),blah()和jfdklsfjaksdf() – invertedSpear

+0

invertedSpear:* twitch * – jnylen

+0

@invertedSpear这些都是可怕的函数名称。是的,他们在技术上是合法的,但仅仅基于技术上合法的做出这些决定是一个被证实的错误。 – Hassan

2

使用multiple selector

$('#eplanner-view-range-right-arrow,#lesson-search-tab,#eplanner-view-range-left-arrow').live('click', function(){ 
    removeTut(); 
    callAjaxToCheck(); 
    showTutorial = true; 
}); 
+1

对'.live'的这种调用对所有元素都使用委托事件,而原始代码则没有。 – jnylen

+0

@jnylen:其实这样做。 –

+2

@jnylen:我正在使用'live'。 –

2
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); 

改变.live().on().live()已废弃的jQuery版本1.7+。如果您运行的是旧版本的jQuery,请不要更改.live()

+1

这可能不完全相同。 '.live'让事件被授权,这不是。 –

+0

@火箭更好? :) – sQVe

+0

是的,这是更好的:-) –

相关问题