2014-02-22 153 views
1

我的cca 150元素具有相同的名稱,但id不同。我需要將相同的點擊功能綁定到它們。在當前的代碼中,以下產生了150次,但我認爲必須有更高效的方式。jquery - 具有不同編號的多個元素的相同點擊功能

重寫下面的代碼最有效的方法是什麼?

<script> 
    var jizda_1 = $('a#jizda_1'); 
    jizda_1.click(function(e) { 
     e.preventDefault(); 
     id = 1; 
     $('#jizda_' + cisloJizdy + '.active').removeClass('active'); 
     cisloJizdy = 1; 
     if ($(this).hasClass('closed')) { // uzavrena jizda 
      generujPoziceUzavreneJizdy(cisloJizdy); 

     } else { 
      generujPoziceOtevreneJizdy(cisloJizdy); 
     } 
     $(this).addClass('active'); 
     $('#detailZakaznika').hide(); 
     $('#tiskDokladu').addClass('disabled'); 
     $('#tiskUctenky').addClass('disabled'); 
    }); 
    var jizda_2 = $('a#jizda_2'); 
    jizda_2.click(function(e) {........ 
    }); 
</script> 
+2

給他們所有相同的類,並將處理程序綁定到類。 – Barmar

+0

參照一個類,所有150個元素都有,並使用$(this)來標識單擊的一個元素。 – berentrom

+1

我不相信你可以在任何jQuery教程中得到很多,而沒有看到使用類的例子。 – Barmar

回答

4

我會改變HTML,因此有問題的元素共享一個共同的類。然後:

$("a.the-class").click(...); 

在單擊處理程序,使用this(這將是一個點擊的元素),直接(它的DOM元素),或在一個jQuery包裝($(this))包裝它,來指代特定的元件。

Live Example | Source

但是你可以使用attribute-starts-with選擇通過id的公共部分選擇它們:

$('a[id^=jizda_]').click(...); 

Live Example | Source

0
$('[id^="jizda_"]').each(function (k, v) { 
    $(this).click(function (e) { 
     e.preventDefault(); 
     id = k+1; 
     $('#jizda_' + cisloJizdy + '.active').removeClass('active'); 
     cisloJizdy = k+1; 
     if ($(this).hasClass('closed')) { // uzavrena jizda 
      generujPoziceUzavreneJizdy(cisloJizdy); 
     } else { 
      generujPoziceOtevreneJizdy(cisloJizdy); 
     } 
     $(this).addClass('active'); 
     $('#detailZakaznika').hide(); 
     $('#tiskDokladu').addClass('disabled'); 
     $('#tiskUctenky').addClass('disabled'); 
    }); 
}); 
相關問題