3

我正在创建一个 DOM 元素的焦点对象来处理各种后续事件。但是,在元素失去焦点后,我需要以某种方式销毁对象,以便将来对元素的关注创建一个不引用原始对象的新对象。

现在,我遇到的这个问题是随后的点击会创建另一个对象,并且所有函数都被调用了两次。再次单击,三下。等等。下面的代码显示了单击事件和对象创建的示例。

任何帮助,将不胜感激。

    var videoTopicsHandler = DojoOn(videoTopicsInput, 'focus', function(e){ 
        dropKeyPress(this, 'video-topics');
    });
    var dropKeyPress = function(input, ulId, scroll) {
        var handler;

        obj = new dropDownObj(ulId, scroll); 
        obj.attachEvents(obj, handler, input);
    };
4

2 回答 2

0

尝试这个:

var obj = null;
var dropKeyPress = function(input, ulId, scroll) {
        var handler;
        if(obj !== null) obj.destroyRecursively();
        obj = new dropDownObj(ulId, scroll); 
        obj.attachEvents(obj, handler, input);
    };
于 2012-06-26T03:51:30.383 回答
0

您可能希望缓存您创建的那些对象,并在元素重新获得焦点时从缓存中提取它们,而不是删除它们。优点:速度更快,无需在每次重新聚焦时重新生成对象并销毁它们;缺点:未使用的对象会占用内存,但如果您足够快地转到下一页,或者这些对象的数量很少并且重新聚焦经常发生,所以无论如何您都需要它们,这可能是无关紧要的。

于 2012-07-09T14:56:55.557 回答