나는 달력을 만들고있다. 사용자가 특정 날 (테이블 셀) 안의 아무 곳이나 클릭 할 수 있기를 원합니다. 그날 이벤트가있을 수 있습니다.이 이벤트는 테이블 셀의 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()는 매개 변수를 가지고 있다는 것입니다.
분명히 옳을 것입니다. 처음 사용자가 div를 클릭하면 doSomethingElse가 호출되어 새로운 클릭 핸들러를 바인딩합니다. 그때부터 모든 클릭은 doSomethingElse (아직 다른 클릭 핸들러를 바인드 함)와 그 함수에서 이미 바인드 된 클릭 핸들러를 호출해야합니다 ... 중복되고 불필요합니다 (정확히는 해로운 것은 아닙니다) – Ian
주석 주셔서 감사합니다. '당신의 문서에서'클릭 바인딩 ($ ('. view'). 클릭 부분)을 넣으십시오. '라는 말의 의미가 확실하지 않습니다.' –
좋습니다. $ (". view"). click은 바인딩 전용입니다 (즉, click 이벤트에 대한 해당 클래스의 요소를 바인딩하고 실제로 처리기 내에서 코드를 실행하지 않습니다). 따라서 사용자가 클릭하기 전에 바인딩을 만들어야합니다. "$ (document) .ready (function() {});에 넣어야합니다." 블록. 명시 적 onclick = "doSomethingElse()"를 중복으로 제거합니다. –