jQuery - 区分程序化事件调用和用户事件调用

时间:2014-06-18 22:37:50

标签: jquery

我有一个像这样的jQuery事件监听器:

$('input[data-name="PretaxAmount"]').live('change', function () {
  ....
}

我在javascript中有一个以编程方式调用的地方,如下所示:

pretaxAmount.change();

对象" pretaxAmount"因此定义:

pretaxAmount = row.find('input[data-name="PretaxAmount"]');

onchange事件侦听器以编程方式和人工交互方式进行调用。我需要能够分辨出来,以便我知道人类何时在浏览器中触发了事件而不是在页面加载时自动完成它的javascript。我已经看到了一些stackoverflow解决方案,但它们似乎并不适合我的特定场景。

我将为特定代码示例的答案授予如何使用我的代码实现此,而不是指向其他问题或文章的链接。提前谢谢。

2 个答案:

答案 0 :(得分:1)

这是区分差异的一种方法:

function handlePretaxChange(e) {
    if (!e) {
        // triggered manually by code
    } else {
        // triggered by user
    }
}

$(document).on('change', 'input[data-name="PretaxAmount"]', handlePretaxChange);

// trigger in your code (assumes you only have one item named pretaxAmount):
var pretaxAmount = row.find('input[data-name="PretaxAmount"]');
handlePretaxChange.call(pretaxAmount[0], null);

答案 1 :(得分:0)

如何检查originalEvent属性的存在?

var pretaxAmount = row.find('input[data-name="PretaxAmount"]');
$(pretaxAmount).change(function(e){
    if(!!e.originalEvent){
        console.log("human");
    }else{
        console.log("CPU");
    }
})

jQuery在将事件包装到自己的对象时提供此属性。

pretaxAmount.change(); //prints CPU