Jon*_*lls 9 javascript jquery javascript-events eventemitter
我有一个人对象,我基本上希望它能够发出自己的事件.但是,如果触发事件与原型具有相同的名称,则Chrome会打印出相当大的错误.在下面的代码示例中, person.murder触发murder将错误写入控制台的事件.(代码更有意义).
function Person() {
}
Person.prototype.murder = function() {
$(this).trigger("murder");
}
Run Code Online (Sandbox Code Playgroud)
我像这样调用触发器
var barry = new Person();
$(barry).on("murder", function(){
alert("I am so angry");
})
barry.murder();
Run Code Online (Sandbox Code Playgroud)
因此谋杀巴里导致错误,但是如果事件是这样的事情personDied,那么没有错误.我是否正确地触发了事件?我只是想毫无错误地杀人.
有时会返回错误的崩溃<error>,有时甚至
未捕获RangeError:超出最大调用堆栈大小
问题是jQuery以递归方式调用该方法.来自http://api.jquery.com/trigger/:
Note: For both plain objects and DOM objects, if a triggered event name matches the name
of a property on the object, jQuery will attempt to invoke the property as a method if no
event handler calls event.preventDefault(). If this behavior is not desired, use
.triggerHandler() instead.
Run Code Online (Sandbox Code Playgroud)
所以你应该使用triggerHandler而不是trigger.