JQuery触发自定义事件会导致错误

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:超出最大调用堆栈大小

Cha*_*ngo 9

问题是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.