Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery-区分编程事件调用和用户事件调用_Jquery - Fatal编程技术网

jQuery-区分编程事件调用和用户事件调用

jQuery-区分编程事件调用和用户事件调用,jquery,Jquery,我有一个jQuery事件侦听器,如下所示: $('input[data-name="PretaxAmount"]').live('change', function () { .... } 我在javascript中有一个以编程方式调用它的位置,如下所示: pretaxAmount.change(); 对象“税前金额”的定义如下: pretaxAmount = row.find('input[data-name="PretaxAmount"]'); onchange事件监听器既可以通过

我有一个jQuery事件侦听器,如下所示:

$('input[data-name="PretaxAmount"]').live('change', function () {
  ....
}
我在javascript中有一个以编程方式调用它的位置,如下所示:

pretaxAmount.change();
对象“税前金额”的定义如下:

pretaxAmount = row.find('input[data-name="PretaxAmount"]');
onchange事件监听器既可以通过编程方式调用,也可以通过人工交互调用。我需要能够分辨出两者的区别,这样我才能知道何时有人在浏览器中触发了事件,而不是在页面加载时自动触发事件的javascript。我在这方面见过一些stackoverflow解决方案,但它们似乎不太适合我的特定场景


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

这里有一种方法可以说明区别:

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);

检查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

首先,您不应该再使用
.live()
,因为它已被弃用,然后从jQuery的最新版本中删除。
.on()
的动态形式是替换。您到底尝试了什么?甚至不需要让处理程序本身能够做出决定——您可以轻松地将处理程序拆分为多个部分,并手动调用所需内容,而不是触发处理程序。通过将其设置为命名函数并直接使用您想要的参数调用它,也可以很容易地使其能够识别。您是否查看了传递给处理程序的
事件
,以查看手动触发事件时该事件有何不同?我如何查看传递给处理程序的事件?我没有看到作为事件对象的param/arg。