[英]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();
工作示例:
jQuery .triggerHandler()
文档:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.