2011-03-10 2 views
1

저는 Internet Explorer에서 실행되는 레거시 응용 프로그램에서 흥미로운 코드를 실행했습니다. 다음을 고려해보십시오.테이블 행의 OnClick 이벤트가 모든 포함 된 요소로 전파됩니까?

<script type="text/javascript"> 
    function selectRow() 
    { 
    var src = window.event.srcElement; // Array of OPTION?! 
    var rowIndex = src.rowIndex; // Undefined for an OPTION element 
    highlightRow(rowIndex); 
    } 
</script> 
<table> 
    <tr onclick="selectRow();"> 
    <td> 
     <select id="foo"> 
     <option value="baz">baz</option> 
     </select> 
    </td> 
    </tr> 
</table> 

여기 내가 왜 잘못되었습니다. 사용자가 SELECT 소자로부터 항목을 선택하면, onclick 이벤트 소성하고 따르는 것이 참인

  • '이'윈도우 '
  • 'Window.event.srcElement '로 평가는 평가 'OPTION'요소의 배열
  • 이벤트 처리기 내에서 옵션의 부모 요소에 도달하는 방법이없는 것처럼 보입니다.

클릭 한 테이블 행의 색인을 가져올 수 있어야합니다. (위의 예제에서 볼 수 있듯이, 기존 코드를 잘못 this.rowIndex 테이블의 현재 행 지수로 평가한다고 가정합니다.) 나는 범인이 여기 버블 링 이벤트가 있으리라 믿고있어

.

이 문제를 가장 정확한 방식으로 수정하기위한 제안이 있습니다. 이벤트가 행에 묶여있는 방식 일 수 있다는 것이 나에게 발생하지만, (이벤트가 여전히 거품이 나기 때문에) 나는 의심 스럽다.

는 (우리의 회사는 IE는. 메신저를 쏘지 마십시오 지원하기 때문에 FWIW, 내가 다른 브라우저에서이 시도하지 않았습니다.)

답변

0

당신은 샘플에서 몇 가지 추가 복잡성을 누락? 왜냐하면 그 이유는 단지 :

<tr onclick="highlightRow(this.rowIndex);"> 

입니다. 실제로 이것이 모두 필요한 경우입니다.