jQuery事件触发,但是在处理程序上没有反应

时间:2018-10-22 13:41:13

标签: javascript jquery events

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');

1 个答案:

答案 0 :(得分:0)

我现在在代码中看到错误。

//correct
target.events.trigger(event);

...应将事件作为第一个参数,而不是目标

e.g.ckan.plugins = pulgin1, plugin2, plugin3