2012-08-24 83 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

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

相關問題