DOM 元素 dblclick 事件在删除 dom 元素时单击事件后更改

DOM element dblclick event changes after click event on dom element deletion

本文关键字:元素 事件 单击 删除 dblclick DOM dom      更新时间:2023-09-26

我在Firefox上遇到了一个奇怪的问题,这个问题似乎在Safari上没有发生。

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

如果我评论删除该行的行

(不是单击的行,正如我所说,而是另一个行),那么onclickondblclick事件都将触发......我附上两个事件函数的代码:

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

Firefox 工作正常。根据规范,onclick无论如何都会在ondblclick之前触发。看看这个,所以答案来克服它。