2013-03-25 55 views
3

目前,我有一個緩存的變量,$this,上我申請.on對各種可能類型的行爲觸發響應。jQuery的。對多個事件和選擇

$this.on('click','.trigger a',rowTrigger); 
$this.on('click','.actions nav a',rowAction); 

jQuery .on Documentation如果有上述兩種組合成一個單一的通話某種程度上,它沒有提及。例如,這樣的事情可能是好的:

$this.onAny({ 
    click: [ 
     {'.trigger a':rowTrigger}, 
     {'.actions nav a':rowAction} 
    ] 
}); 

有沒有辦法實現這種說法(例如現有的插件來擴展.on)?

UPDATE

用例(在當前代碼,之前一個很好的解決方案):

// Plugin 1: 
function addTriggers(){ 
    $this.find('td:last').append('<span class="trigger"><a href="#"></a></span>'); 
    return {selector:'.trigger a', event:'click', target: $this, callback: rowTrigger}; 
} 

// Plugin 2: 
function addInlineNavigation(){ 
    $navCode = '...' 
    $this.find('td:last').append('<div class="actions">'+$navCode.html()+'</div>'); 
    return {selector:'.actions nav a', event:'click', target: $this, callback: rowAction}; 
} 
+0

要創建可以由希望在特定事件綁定(在我的情況)來擴展功能'$ this'其他插件添加到一個數組。一個對象也可以工作,但我正在處理的想法是抽象出目標選擇器和回調對。 – MyStream 2013-03-25 10:12:44

+0

http://stackoverflow.com/questions/8462027/jquery-on-method-on-multiple-selectors – sasi 2013-03-25 10:13:10

+1

這SO參考指的是與一個回調,而不是多個選擇與多個回調,多個選擇,但謝謝你。 – MyStream 2013-03-25 10:14:05

回答

7

有沒有辦法實現這種說法(例如現有的插件擴展.on)?

我不知道一個。寫幾乎是微不足道的。雖然與鏈接相比,我看不出太多優勢:

$this.on('click','.trigger a',rowTrigger) 
    .on('click','.actions nav a',rowAction); 

但是,插件並不複雜。下面是一個未經測試的草稿:

jQuery.fn.onAny = function(options) { 
    var eventName, eventSpec, eventEntry, selector, i; 

    for (eventName in options) { 
     eventSpec = options[eventName]; 
     if (jQuery.isArray(eventSpec)) { 
      // Your example, where each event name has an array of objects 
      // keyed by selector, where the value is the handler 
      for (i = 0; i < eventSpec.length; ++i) { 
       eventEntry = eventSpec[i]; 
       for (selector in eventEntry) { 
        this.on(eventName, selector, eventEntry[selector]); 
       } 
      } 
     } 
     else { 
      // Assuming just a straight handler here 
      this.on(eventName, eventSpec); 
     } 
    } 

    return this; 
}; 
+0

對於「我沒有看到太多優勢」和鏈接電話。爲此建立一個插件是一個不錯的主意。新的團隊成員必須瞭解它是什麼等 – 2013-03-25 10:18:49

+1

HI =)這裏我申請這是記錄的區域,所以這將是學習一個簡單的事情。例如。在我來說,我有一個數組保持事件的名稱(如「點擊」),選擇要聽(例如「.trigger a」)和回調(rowTrigger)函數名。它在某些方面的功能類似pub/sub,所以它不是一個陡峭的學習曲線,但在我的特殊情況下很有用! – MyStream 2013-03-25 10:20:46

+0

@TimBüthe:感謝您修復這個錯字! – 2013-03-25 10:24:05