通过JavaScript或jQuery识别select选项变化(change、onchange、click)事件

Identify select option change (change, onchange, click) event through JavaScript or jQuery

有什么方法可以知道 select 选项何时通过 selectonchange 以外的事件更改?

例如通过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 !');
    }
});

FIDDLE