0

我在理解这个概念时遇到了一些麻烦。我有一个循环,在其中我将事件和处理程序分配给元素。问题是在我的回调中,我也在访问一个成员函数。我设置范围以获得正确的this(指我的对象)但是对于e.target,我没有得到正确的元素。所以我想我也想要正确的元素。下面是代码。

for(var i in type) {
    element.addEventListener(type[i].toLowerCase(), (function (_self, handler) { //Handle this reference in event callback  
        //Using a closure to return callback with correct context                   
        return function (event) {
            //console.log(arguments);
            //console.log(this);
            _self[handler].apply(_self, arguments);
        }
    }(this, type[i])), capture);
}

现在在我的处理函数中:

dragStart: function (e) {
    console.log(e);
    var that = e.target,
        sectionName = that.id,
        interactionTarget = that.childNodes[0].alt;

    e.dataTransfer.effectAllowed = 'move';
    e.dataTransfer.setData('text/html', that.innerHTML);
    this.dragSrcEl = that;
    that.classList.add('fade');
    this.triggerEvent("whatever");
},

triggerEvent是成员函数。我想要的是this与我的对象对应的正确元素,以及我的事件绑定到的正确元素。

4

1 回答 1

0

我想我明白你现在在问什么。这是我可以做到的:

for(var i in type) {
    element.addEventListener(
        type[i].toLowerCase(), 
        this[type[i]].call(this, element), 
        capture)
}

和dragStart:(如果使用ES5)

dragStart: function (element) {
    return function(e){
        //this === original object
        //element === listening element
        //e.target === firing element
    }.bind(this)
}

如果需要支持较旧的 IE:

dragStart: function (element) {
    var self = this
    return function(e){
        //self === original object
        //element === listening element
        //e.target === firing element
    }
}
于 2013-05-08T21:02:59.130 回答