jQuery 的 change()
方法是用于绑定元素值改变时触发的事件处理函数。当你在循环中尝试为多个元素绑定 change()
事件时,可能会遇到只最后一个绑定生效的问题。
这个问题通常由以下两种常见情况引起:
$('.my-select').each(function(index) {
(function(i) {
$(this).change(function() {
console.log('Select ' + i + ' changed');
});
})(index);
});
$('.my-select').each(function(index) {
$(this).change(function() {
console.log('Select ' + index + ' changed');
});
});
$(document).on('change', '.my-select', function() {
console.log('Select changed: ' + $(this).val());
});
假设有以下 HTML:
<select class="dynamic-select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
<select class="dynamic-select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
<select class="dynamic-select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
正确绑定事件的 JavaScript:
// 方法1:使用 each()
$('.dynamic-select').each(function(index) {
$(this).change(function() {
console.log('Select ' + index + ' changed to: ' + $(this).val());
});
});
// 方法2:使用事件委托
$(document).on('change', '.dynamic-select', function() {
console.log('Select changed to: ' + $(this).val());
});
off()
方法先解绑事件可以防止重复绑定没有搜到相关的文章