jQuery事件处理存在一个奇怪的问题,我的.triggers正在触发,但是.on处理程序没有反应。
通常,我首先会猜测我要对触发器做出反应的元素尚未完全设置,但是在触发触发器之前,我可以检查该元素并查看确实存在处理程序。
为促进其他功能,我最近移动了一些代码,从直接在对象的实例上设置处理程序,转而尝试尝试几种组合,以尝试在要实例化的对象的原型或构造函数中进行设置。 。这似乎是发生中断的地方,但是我无法弄清楚为什么,因为对象存在,处理程序存在,然后才尝试触发它们。从本质上讲,工作流程应该已经更改,但是时间安排应该仍然相同。
下面的示例是在构造函数中设置的,在扩展原型和事件方面也没有很大的成功。
希望有人可以指出我正确的方向,我敢肯定这并不复杂。
https://codepen.io/othbert/pen/VEBEGw
<!-- html -->
<div data-obj="a"></div>
<div data-obj="b"></div>
和javascript ...
//js
globalObject = [];
function callEventTriggers(event){
//for each element registered in the globalObject
for (let index in globalObject) {
let target = globalObject[index];
//what event on what target
console.log('triggering: ' + event + ' on target: ', target);
//fire
target.events.trigger(target, event);
}
}
//objects to create
objectWithEvents = function(type){
this.type = type;
//using an empty jquery object to hold events
this.events = $({});
this.events.on('testevent', function(){
//we never fire this
console.log('firing event', this);
//just dump output to the container to demonstrate
$('#content').html(this);
});
}
//extend with prototype method to add object to a global
objectWithEvents.prototype.addToGlobalObject = function(global){
global.push(this);
}
//for each object, create a js object instance
$('[data-obj]').each(function(){
//create the instance
var test = new objectWithEvents($(this).data('obj'));
//attach it to document so we can show calling triggers from different function context.
test.addToGlobalObject(globalObject);
});
//call the triggers from some unrelated code...
callEventTriggers('testevent');
答案 0 :(得分:0)
我现在在代码中看到错误。
//correct
target.events.trigger(event);
...应将事件作为第一个参数,而不是目标
e.g.ckan.plugins = pulgin1, plugin2, plugin3