2012-04-28 3 views
3

사파리에서 발생하지 않는 것 같은 이상한 문제가 있습니다.DOM 요소 dblclick 이벤트가 DOM 요소 삭제시 클릭 이벤트 발생 후 변경됨

각 행에는 고유 한 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); 
}; 
+0

해결되었습니다. 문제는 "if (elem == this.selected) return;"줄에 있었고 DOM 객체가 아니라 클래스를 참조하기 위해 self.selected 여야했습니다 ... – gaspercat

답변

0

Firefox가 올바르게 작동합니다. spec에 따르면 onclick은 ondblclick 전에 어쨌든 시작됩니다. 이를 극복하기 위해 so answer을 확인하십시오.