我有一个正常选择列表的代码:
$('.update-title')
.change(function () {
var title = $('option:selected', this).prop('title');
$("#modal_Title").val(title);
});
当填充select时,似乎会触发此操作。只有当用户进入并手动重新选择其他值时,我才能实现这一点吗?
答案 0 :(得分:1)
您可以使用布尔值来确定是否第一次触发事件。例如,您的代码可以是这样的......
var first_time_select = true;
$('.update-title')
.change(function () {
if (first_time_select) {
first_time_select = false;
} else {
var title = $('option:selected', this).prop('title');
$("#modal_Title").val(title);
}
});
答案 1 :(得分:0)
除语法错误外,您的代码完全正确。删除语法错误
工作 demo
$('.update-title')
.change(function () {
var title = $('option:selected', this).prop('title');
$("#modal_Title").val(title);//you are missing quotes
});
答案 2 :(得分:0)
不是这样,但是当您以编程方式更改数据时,始终可以将数据分配给选择框。然后你会检查它是否已经改变:
$('#mybutton').on('click', function() {
$('.update-title').data('dont-change', 1);
// repopulate the dropdown here...
});
$('.update-title')
.change(function () {
if (!$(this).data('dont-change')) {
var title = $('option:selected', this).prop('title');
$("#modal_Title").val(title);//you are missing quotes
} else {
$(this).removeData('dont-change');
}
});
答案 3 :(得分:0)
我不确定为什么当你用数据填充它时,你的选择的更改事件会被触发(我已经注意到这样的事情发生在Knockout上)。但是,如果您想避免它被触发,为什么不在更改元素时对元素使用.off()
(link),然后.on(callback)
再次激活它? (我建议使用命名函数而不是内联函数来执行此操作。)
这是一个人为的例子:http://jsfiddle.net/b2x2T/11/
请注意,在该示例中,我实际上不需要使用on / off,因为它不会触发change
事件,但我认为你明白这一点。
编辑:出于好奇,您何时以及如何填充选择列表?
答案 4 :(得分:-1)
change
事件仅在元素获得焦点,值发生变化且元素失去焦点时由浏览器触发。最初填充元素时不会发生这种情况,并且在最初填充change
时,我从未遇到过触发的<select>
事件。
似乎你在某个地方有一些代码触发该元素上的change事件处理程序,因为你所描述的不是标准行为。