2014-02-24 25 views
0

我知道用逗號分隔選擇器列表實際上是綁定多個選擇器到同一個事件或別的東西。所以這不是問題。多個jQuery選擇器綁定到相同的事件有點變化

這裏的問題是,我想要做點什麼只是一點基於哪個選擇器被點擊不同。

比如我有兩個環節:

<a href="#" data-do="add">Add</a>
<a href="#" data-do="delete">Delete</a>

然後,我有這樣一個選擇:

$('[data-do="add"], [data-do="delete"]').click(function() { 
    // do same stuff 
}); 

data-do="add"我想要做一個稍微不同的處理在活動中。就像我可以不知何故詢問$(this)是否包含添加然後改變事件中的某些內容並阻止通常的流程。

只要知道如何知道在事件內部點擊了哪個鏈接,我就可以用簡單的if聲明來完成其餘的操作。這裏的問題是我不知道如何做到這一點。

任何幫助,將不勝感激。

回答

1

this事件處理程序內是指點擊的元素,所以你可以使用this來引用點擊的元素

$('[data-do="add"], [data-do="delete"]').click(function() { 
    //general code 
    if ($(this).data('do') == 'add') { 
     //something special 
    } 
}); 
+0

太好了!非常感謝。 – Aborted

1
$('[data-do="add"], [data-do="delete"]').click(function() { 
    if ($(this)).attr("data-do") == "add"){ 
     // do something for add 
    } 
    if ($(this)).attr("data-do") == "delete"){ 
     // do something for delete 
    } 
}); 

還應作品有「數據」 ...

$('[data-do="add"], [data-do="delete"]').click(function() { 
    if ($(this)).data("do") == "add"){ 
     // do something for add 
    } 
    if ($(this)).data("do") == "delete"){ 
     // do something for delete 
    } 
}); 

是否有效? :)

0
$('[data-do="add"], [data-do="delete"]').click(function() { 
    var elementType = $(this).data("do") == "add" ? "ADD":"DELETE"; 
    alert(elementType); //Switch by elementType 
}); 

JS小提琴:http://jsfiddle.net/9n8gp/

0
$('[data-do="add"], [data-do="delete"]').click(function() { 
    // do same stuff 

    /* you could use a simple if */ 
    if (this.dataset.do === 'add') { 

    } 

    /* or even a more complex switch */ 
    switch (this.dataset.do) { 
     case 'add': 
      /* specific code for add */ 
      break; 
     case 'delete': 
      /* specific code for delete */ 
      break; 

    } 
}); 

你可以用this.dataset.do讀取屬性,拯救一對夫婦的jQuery的調用。

這裏some performance testdata-*屬性訪問

相關問題