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