繁体   English   中英

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

[英]JQuery triggering custom event causes error

我有一个人对象,我基本上希望它能够发出自己的事件。 但是,如果触发事件与原型同名,那么 Chrome 会打印出一个相当大的错误。 在下面的代码示例中, person.murder触发了将错误写入控制台的murder事件。 (代码更有意义)。

function Person() {

}

Person.prototype.murder = function() {
   $(this).trigger("murder");
}

我这样调用触发器

var barry = new Person();
$(barry).on("murder", function(){
   alert("I am so angry");
})

barry.murder();

所以谋杀 barry 会导致错误,但是如果事件类似于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.

所以你应该使用triggerHandler而不是trigger

触发器murder调用Person上的方法murder ,因为您在对象Person上触发了它。 这将再次调用murder方法等(无休止的循环)。

如果您使用 jQuery 的.triggerHandler()函数,它只会触发触发器,而不会调用方法。

function Person() {

}

Person.prototype.murder = function() {
   $(this).triggerHandler("murder");
}

var barry = new Person();
$(barry).on("murder", function(){
   alert("I am so angry");
})

barry.murder();

工作示例:

http://jsfiddle.net/6neHC/

jQuery .triggerHandler()文档:

http://api.jquery.com/triggerHandler/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM