user1679941
问问题
55 次
5 回答
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);
}
});
于 2012-09-24T11:56:08.790 回答
0
我不确定为什么当你用数据填充它时会触发你的 select 的 change 事件(我注意到 Knockout 发生了类似的事情)。但是,如果你想避免它被触发,为什么不在元素上使用.off()
( link ) 来更改它,然后.on(callback)
再次激活它呢?(我建议使用命名函数而不是内联函数来执行此操作。)
这是一个人为的例子:http: //jsfiddle.net/b2x2T/11/
请注意,在该示例中,我实际上不需要使用开/关,因为它不会触发change
事件,但我认为您明白了。
编辑:出于好奇,您何时以及如何填充选择列表?
于 2012-09-24T12:04:54.760 回答
0
您的代码完全正确,除了语法错误。删除语法错误
工作演示
$('.update-title')
.change(function () {
var title = $('option:selected', this).prop('title');
$("#modal_Title").val(title);//you are missing quotes
});
于 2012-09-24T11:54:54.220 回答
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');
}
});
于 2012-09-24T11:58:22.160 回答
-1
该change
事件仅在元素获得焦点、值发生变化、元素失去焦点时由浏览器触发。最初填充元素时不会发生这种情况,而且我个人从未遇到过在最初填充元素时change
触发的事件<select>
。
似乎您在某处有一些代码以编程方式触发该元素上的更改事件处理程序,因为您所描述的不是标准行为。
于 2012-09-24T12:02:11.520 回答