gpt4 book ai didi

angularjs - 如何使用特定的假 'event' 参数调用 triggerHandler?

转载 作者:行者123 更新时间:2023-12-03 15:05:27 25 4
gpt4 key购买 nike

我正在尝试在链接上测试是否调用了“preventDefault”。但是,我很难用我可以监视的对象替换真正的“事件”对象:

这是我触发点击事件的方式:

var e = jasmine.createSpyObj('e', [ 'preventDefault' ]);
$element.triggerHandler('click', [e]);

但是,当指令代码正在运行时,事件元素不会被替换为假的:
$element.on('click', function(event) {
console.log(event);
}

我尝试了不同的方式向 triggerHandler 添加第二个参数 - 作为数组,作为对象,只是一些行等。都没有奏效。丢失...

提前致谢!

最佳答案

文档说 triggerHandler()将一个虚拟对象传递给处理程序:http://docs.angularjs.org/api/ng/function/angular.element

查看源码,可以看到triggerHandler()创建自己的事件对象,然后将您的第二个参数作为事件数据传递,而不是实际的事件对象:

https://github.com/angular/angular.js/blob/master/src/jqLite.js#L882

相关代码:

var event = [{
preventDefault: noop,
stopPropagation: noop
}];

forEach(eventFns, function(fn) {
fn.apply(element, event.concat(eventData));
});

我使用 jQuery 的内部事件模拟器来创建我自己的事件。这可能对您有用: http://wingkaiwan.com/2012/09/23/triggering-mouse-events-with-jquery-simulate-when-testing-in-javascript/

关于angularjs - 如何使用特定的假 'event' 参数调用 triggerHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com