【问题标题】:DOM element dblclick event changes after click event on dom element deletion删除 dom 元素的 click 事件后 DOM 元素 dblclick 事件发生变化
【发布时间】:2012-04-28 09:44:04
【问题描述】:

我在 Firefox 上遇到了一个奇怪的问题,在 safari 上似乎不会发生。

有一个包含一组行的表,每行都有自己的 onclick 和 ondblclick 事件。当双击其中一个对象时,它首先触发 onclick 关联函数(如预期的那样),其中另一行(与双击的不同)被删除。之后,与 dblclick 关联的函数将不会触发。

如果我评论删除该行的行(不是我所说的点击的那一行,而是另一行),那么 onclick 和 ondblclick 事件都会触发...我附上这两个事件函数的代码:

ret.onclick = function(){
    // Trigger click event
    var evt = arguments[0] || window.event;
    self.signalClick(evt.target || evt.srcElement);

    if(elem == this.selected) return;

    if(self.selected != null){
        // Set list element to not selected
        var telem = document.getElementById(self.getChildID(self.selected['id']));
        telem.setAttribute('class', 'gui_list_uselected');

        // Remove previously selected element summary
        var telemexp = document.getElementById(self.getChildID(self.selected['id']) + '_exp');
        if(telemexp) telemexp.parentNode.removeChild(telemexp); // FAULTY LINE!
    }

    ret.setAttribute('class', 'gui_list_selected');
    self.selected = elem;

    // Add element summary to the list
    appendAfter(ret, self.drawSummary(elem));
};

ret.ondblclick = function(){
    // Trigger double click event
    var evt = arguments[0] || window.event;
    self.signalDblClick(evt.target || evt.srcElement);
};

【问题讨论】:

  • 已经解决了。问题出在“if(elem == this.selected) return;”这行,它必须是 self.selected,才能引用类,而不是 DOM 对象...

标签: javascript dom javascript-events


【解决方案1】:

Firefox 可以正常工作。根据spec,无论如何都会在ondblclick 之前触发onclick。 看看这个so answer 来克服这个问题。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多