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);
});
将更改事件绑定到 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);
});