2012-06-06 2 views
0

나는 달력을 만들고있다. 사용자가 특정 날 (테이블 셀) 안의 아무 곳이나 클릭 할 수 있기를 원합니다. 그날 이벤트가있을 수 있습니다.이 이벤트는 테이블 셀의 div 안에 있습니다. 사용자가 div를 클릭하면 다른 일이 발생합니다. 사용자가 doSomethingElse()를 클릭 할 때 이벤트 버블 링을 방지 할 수 있었지만 처음 클릭 할 때 작동하지 않습니다. 첫 번째 클릭에는 결코 발생하지 않는 후속 클릭에서만 작동합니다. 첫 번째 클릭에서 이벤트 버블 링 취소가 작동하지 않고 이후의 모든 클릭에 대해서만 작동하는 이유는 무엇입니까?처음으로 div를 클릭하면 어떻게 이벤트 버블 링이 작동합니까?

HTML :

<table> 
    <tr> 
     <td onclick="doSomething()"> 
      <div class="view" onclick="doSomethingElse()">Text</div> 
     </td> 
    </tr> 
</table> 

자바 스크립트 :

function doSomethingElse() { 
    $('.view').click(function(e){ 
     e.cancelBubble = true; 
     e.returnValue = false; 

     if (e.stopPropagation) 
     { 
      e.stopPropagation(); 
     } 
    }); 

    $('#myID').load('myFile.php'); 
} 

UPDATE : 내 페이지에 넣어 : 다음

<script> 
$(document).ready(function() { 
    $('.view').click(function(e){ 
     e.cancelBubble = true; 
     e.returnValue = false; 

     if (e.stopPropagation) 
     { 
      e.stopPropagation(); 
     } 
    }); 
}); 
</script> 

의 onclick을 = "doSomethingElse()"단지 나머지 스크립트가 들어 있습니다. 그것은 여전히 ​​2, 3, ... 클릭에 작동하지만 첫번째하지

<div class="view" onclick="doSomethingElse(id1,id2)">Text</div> 

: 난 아직도 다음이 필요 것 같다, 그래서 문제는, doSomethingElse()는 매개 변수를 가지고 있다는 것입니다.

답변

1

onclick 처리기에서 바인딩 코드를 효과적으로 작성했기 때문에. 클릭 바인딩 ($ ('. view'). 클릭 부분)을 문서에서 사용할 준비가되었습니다. 또한 처리기 외부의로드가 왜입니까?

+0

분명히 옳을 것입니다. 처음 사용자가 div를 클릭하면 doSomethingElse가 호출되어 새로운 클릭 핸들러를 바인딩합니다. 그때부터 모든 클릭은 doSomethingElse (아직 다른 클릭 핸들러를 바인드 함)와 그 함수에서 이미 바인드 된 클릭 핸들러를 호출해야합니다 ... 중복되고 불필요합니다 (정확히는 해로운 것은 아닙니다) – Ian

+0

주석 주셔서 감사합니다. '당신의 문서에서'클릭 바인딩 ($ ('. view'). 클릭 부분)을 넣으십시오. '라는 말의 의미가 확실하지 않습니다.' –

+0

좋습니다. $ (". view"). click은 바인딩 전용입니다 (즉, click 이벤트에 대한 해당 클래스의 요소를 바인딩하고 실제로 처리기 내에서 코드를 실행하지 않습니다). 따라서 사용자가 클릭하기 전에 바인딩을 만들어야합니다. "$ (document) .ready (function() {});에 넣어야합니다." 블록. 명시 적 onclick = "doSomethingElse()"를 중복으로 제거합니다. –