通过JavaScript或jQuery识别select选项变化(change、onchange、click)事件
Identify select option change (change, onchange, click) event through JavaScript or jQuery
有什么方法可以知道 select
选项何时通过 select
中 onchange
以外的事件更改?
例如通过jQuery.
$('select').val('2');
$('#someButton').click(function() { $('select').val('2');});
意思是如果我通过点击按钮更改select
值,我可能会收到一条消息提示。但是当我通过从 select
中选择选项来更改 select
值时,我不会收到消息提示。
除了设置一个定时器扫描页面来检查是否有任何 select
值改变(这会严重降低性能),还有其他方法吗?
嗯,假设你有一个事件处理程序
$('select').on('change', function() {
alert('change triggered !');
});
该事件处理程序不会通过以编程方式更改值来触发,只有用户操作才会触发该处理程序,除非它是专门触发的,这意味着我们必须这样做
$('select').val('2').trigger('change');
这使我们能够检查事件是由用户操作触发还是以编程方式触发,方法是
$('select').on('change', function(e) {
if ( e.isTrigger ) {
alert('change triggered programatically !');
} else {
alert('change triggered by user !');
}
});
有什么方法可以知道 select
选项何时通过 select
中 onchange
以外的事件更改?
例如通过jQuery.
$('select').val('2');
$('#someButton').click(function() { $('select').val('2');});
意思是如果我通过点击按钮更改select
值,我可能会收到一条消息提示。但是当我通过从 select
中选择选项来更改 select
值时,我不会收到消息提示。
除了设置一个定时器扫描页面来检查是否有任何 select
值改变(这会严重降低性能),还有其他方法吗?
嗯,假设你有一个事件处理程序
$('select').on('change', function() {
alert('change triggered !');
});
该事件处理程序不会通过以编程方式更改值来触发,只有用户操作才会触发该处理程序,除非它是专门触发的,这意味着我们必须这样做
$('select').val('2').trigger('change');
这使我们能够检查事件是由用户操作触发还是以编程方式触发,方法是
$('select').on('change', function(e) {
if ( e.isTrigger ) {
alert('change triggered programatically !');
} else {
alert('change triggered by user !');
}
});