2012-03-16 48 views
6
var $obj1 = $('a#one'); 
var $obj2 = $('a#two'); 
var $obj3 = $('a#three'); 

// Assume $('a#one, a#two, a#three') wasn't an option. 

我如何分配例如一個(相同)的事件處理程序click()這三個jQuery對象?從本質上講,我期待做的更有效的方法:(非常)略短合併/鏈的多個jQuery對象

$obj1.click(function() { /* Code A */ }); 
$obj2.click(function() { /* Code A */ }); 
$obj3.click(function() { /* Code A */ }); 
+1

'delegate'是你的朋友。 – c69 2012-03-16 07:41:47

+1

爲什麼不爲所有對象添加一個類並將其用作選擇器? '$( 'a.codeA')點擊(函數(){/ *代碼A * /});' – 2012-03-16 07:46:21

回答

7

只,但:

$([$obj1, $obj2, $obj3]).click(function() { }); 

你將要定義的第一個地區以外的處理程序匿名功能,所以你可能會用Jonas H的方法更好。只是在那裏提出另一個建議。

注意:你可以在技術上做一個混合體,但它是相當漫長的:如果你想避免$ a.click(F)一遍又一遍,

var f = function() { }; 
$([$obj1, $obj2, $obj3]).click(f); 

真的這個問題是唯一有用的這是比這個jQuery濫用更好的選擇。 :)

+2

你不需要'.each'循環,因爲單擊處理程序連接到的所有元素在目前的收藏中。看到第一個例子http://api.jquery.com/click/ – 2012-03-16 07:50:15

+0

哦,你是對的!我總是忘記jQuery選擇器返回正常的數組。將編輯。 – Corbin 2012-03-16 07:50:52

+2

只是quitck說明,數組語法上面不一樣,如果是鏈接的功能(至少,在jQuery的1.7.2),如jQuery的'data'功能工作。所以這是行不通的:'$([$ OBJ1,$ OBJ 2])的數據( 「屬性」,真正的);'但是這會:'$($ OBJ1,$ obj2的)。數據( 「屬性」,真);'。希望能幫助別人。 – 2012-04-15 11:52:27

1
var myFunction = function() { /* Code A */ }; 

$obj1.click(myFunction); 
$obj2.click(myFunction); 
$obj3.click(myFunction); 
0

得到一個共同的父容器,並在其上使用jQuery .on()

<div id="parent"> 
    <a href="#" id="one">1</a> 
    <a href="#" id="two">2</a> 
    <a href="#" id="three">3</a> 
</div> 

//any <a> clicked under parent executes this function 
$('#parent').on('click','a#one, a#two, a#three',function(){ 
    //do stuff 
}); 

它的最好的部分是:這只是一個處理和它的父。你沒有把多個處理器放在多個元素上。另外,當您修改處理程序時,它對所有處理都有效。無需爲每個擁有它的元素單獨更改處理程序。 demo here


http://api.jquery.com/on/

除了他們來處理尚未創建的後代元素事件的能力,委派事件的另一個優點是,當許多元素必須監測他們的低得多的開銷的潛力。在具有在其TBODY 1000行的數據表,該實施例中附加的處理程序的1,000個元素:

委派的事件的方法附着的事件處理程序僅一個元件中,TBODY,和事件只需要泡上一級(從點擊TR要TBODY)

+0

如果他在容器中有鏈接,他不想操作? – Corbin 2012-03-16 07:46:44

+0

他可以將它們添加到第二個參數中,但仍然是單個處理程序。 – Joseph 2012-03-16 07:49:52

+0

然後,他基本上正在做他說他不想做的事情:) – Corbin 2012-03-16 07:50:20

2

嗯,總是有.add(),但我個人更喜歡寫出.click()功能也一一,如果我有獨立的變量開始還行吧。無需獲取額外的開銷,爲這些微不足道的功能創建新的jQuery對象。

$obj1.add($obj2).add($obj3).on('click' , function() { }); 
// not sure if $obj1.add($obj2, $obj3) will work as well 
+0

'$ obj1.add($ obj2,$ obj3)'不起作用,即處理程序不會附加到'$ obj3'。示例:http://jsfiddle.net/sikusikucom/VsVcy/ – moey 2012-03-16 15:33:24