jQuery 将更改事件绑定到所有 class 元素

jQuery Binding a change event to all class elements

将更改事件绑定到 class 元素时,需要应用索引来发现哪个 class 元素产生了更改事件,例如此处的 [0]

var taskData = new Array;
$($( ".ctaskSelector" )[0]).bind('change', function () {
    var val = $(".ctaskSelector").val();
    var task_ID = taskData[val].task_ID;
    etc
});

一个解决方案是为每个 class 索引复制代码。有没有更明智的方法来解决这个问题?

更明智的方法是在事件处理程序中使用 this 关键字,因为函数的范围是引发事件的元素:

var taskData = [];
// I presume you have some logic here to populate the taskData array...

$('.ctaskSelector').on('change', function () {
    var val = $(this).val();
    var task_ID = taskData[val].task_ID;
    // etc
});

另请注意,bind() 很久 之前就已弃用。您应该改用 on()

如果要访问引发事件的元素,可以使用 $(this) 或具有 event 属性并使用 event.target.

$(".ctaskSelector").on('change', function(e){
   var element = $(this); 
   //or
   var element = $(e.target);
});