jQuery,仅在用户自己更改输入时更改事件

我们可以检测用户是否更改了某些内容:

$('#item').change(function() { alert('changed!'); }); 

遗憾的是,有时我需要巧妙地称之为: $('#item').change()但在这种情况下它也被视为“已更改”。 有没有办法区分用户活动和手动活动?

从jQuery事件处理程序返回的第一个参数是事件对象:

 $('#item').change(function(e) { console.log(e); // The event object }); 

我通常区分用户触发事件和代码触发事件的方式是用户触发事件附加了originalEvent属性。 我不知道这是不是最好的方法,但我会这样做:

 $('#item').change(function(e) { if (e.originalEvent) { // user-triggered event } else { // code-triggered event } }); 

在下面的示例中键入input元素,然后取消对元素的聚焦。 您将收到"user-triggered"的提醒。 单击按钮以调用代码触发的更改。 你会得到一个警告"code-triggered"

 $('#item').change(function(e) { if (e.originalEvent) { alert('user-triggered') } else { alert('code-triggered') } }); $('button').on('click', function() { $('#item').change(); }); 
    

originalEvent不同的方法应该是使用事件参数:

 $('#item').change(function(event, who) { if(who === "machine") alert('machine!'); else alert('human!'); }); $("#item").trigger("change", ["machine"]); 

当用户触发事件时,回调的事件参数将包含originalEvent键,因此您可以执行以下操作:


     $( '#项目')。改变(function(E){
         if(e.originalEvent){
            警报('由用户更改');
         }
         //在这里放置公共代码
     });