2014-02-22 106 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'); 
    }); 
}); 
相关问题