Javascript Jquery`trigger`延迟处理调用
我有一段代码使用Javascript Jquery`trigger`延迟处理调用,javascript,jquery,event-handling,Javascript,Jquery,Event Handling,我有一段代码使用JQuery侦听DOM元素上的初始化事件 var$button=$(“#myButton”) $button.on(“init”,函数(){ log(“你好”) }) $button.trigger(“init”) 您好好的,就像评论中提到的那样,您不能也不应该在创建列表器之前触发事件 但这里有一个我已经准备好的快速黑客解决方案(因为为什么不呢?)\_(ツ)_/”) 工作示例: 添加以下代码并将$button.trigger(“init”)替换为$button.\u trig
JQuery
侦听DOM元素上的初始化事件
var$button=$(“#myButton”)
$button.on(“init”,函数(){
log(“你好”)
})
$button.trigger(“init”)
您好
好的,就像评论中提到的那样,您不能也不应该在创建列表器之前触发事件
但这里有一个我已经准备好的快速黑客解决方案(因为为什么不呢?)\_(ツ)_/”)
工作示例:
添加以下代码并将$button.trigger(“init”)
替换为$button.\u trigger(“init”)
p.s请不要使用此代码。仅仅因为它是可行的,并不意味着应该这样做。不,不创建事件就不能触发事件。感谢您的努力,但我认为这不会通过代码审查:D。
/**
* Create a callable trigger alternative
* @param {String} name
* @param {Mixed} ...params Addition paramaters to send with event
*/
$.fn._trigger = function(name, ...params) {
var $el = this;
// Keep looping every 100ms until the event listner is found
$el.myEventFinder = setInterval(function() {
// Get an object of attached event listeners
var events = $._data($el.get(0), 'events');
// Has the event been found?
if (events[name]) {
// Stop the eventFinder loop
clearInterval($el.myEventFinder);
// Trigger event
$el.trigger(name, ...params);
}
}, 100);
};