2017-02-01 1 views
1

여러 사람들이 내가 친절하게 고정하는 방식으로 응답 사람 this question 어제, 게시

내가 ... 온 클릭 onchange를 혼합했던 지적 편집 내 문제는 아니지만 나는 왜 $("#selector").click 메톤이 작동하는지 알지 못하지만 onchange=(...)은 그렇지 않습니다.

그래서 HTML 헤더에있는 클릭 일상 DataTable의 종류 화재 부모 요소 DataTable을 cloumn 헤더에있는 경우 :

<div> 
    <input type="checkbox" id="select_all" onchange="SelectAll(event)"> 
    SELECT ALL 
</div> 
//This is hit only AFTER the sort routine from the parent element is fired. 
function SelectAll(event) { 
    event.stopPropagation(); 

    var boxes = document.querySelectorAll("[name*=\"include_\"]"); //All checkboxes prefixed "include_".  
    var chk = document.getElementById('select_all').checked; 

    for (var i = 0; i < boxes.length; i++) { 
     if(!boxes[i].disabled) { 
      boxes[i].checked = chk; 
     } 
    } 
} 

//This is hit BEFORE the sort routine from the parent element is fired. 
$("#select_all").click(function(event){ 
    event.stopPropagation() 
}); 
} 

두 번째 방법, 부모 요소의 클릭 이벤트 전에 해고를, 작품을 나를위한, 그러나 2의 기본적인 차이점은 무엇입니까? onchange 논리에서

JsFiddle

+0

onclick이 아니라 onChange 이벤트를 사용하고 있습니다. 일부 브라우저에서는 onchange가 포커스를 잃을 때만 onchange가 시작됩니다. –

답변

3

당신은 모든 브라우저에서 사용할 수 없습니다 또한 당신이 기대하는 클릭 이벤트 보장 100 % 인 글로벌 event 객체를 제공하고 있습니다.

이러한 이유 때문에 on* 이벤트 속성을 사용하지 말고 네이티브 JS 또는 jQuery에서 눈에 잘 띄지 않는 이벤트 핸들러를 사용하는 것이 가장 좋습니다. 핸들러 함수로 전달 된 event 객체는 필요한 정보가 포함 된 관련 이벤트로 보장됩니다.

또한 jQuery 논리가 change이 아닌 click 이벤트 핸들러를 사용하고 있습니다. .click().change()으로 변경하여 키보드를 통해 웹을 탐색하는 사용자를 위해 여전히 이벤트 핸들러가 작동하도록해야합니다. 요소가 포커스를 잃을 때

1

의 onChange 이벤트는 일반적으로 너무 클릭 이벤트가 처음 발사됩니다 발생합니다.

+0

change 이벤트는 텍스트 입력의 흐리게 표시됩니다. 체크 박스는 즉시 제기됩니다 –

+0

죄송합니다 onchange ... – whoasked

0

jQuery를 사용하려는 경우 으로 사용하십시오. 왜 올드 스쿨의 "onxxxx"속성을 이렇게 혼합하고 싶습니까?

코드가 매우 간단합니다. 대신 다음을 수행하십시오.

<div> 
    <input type="checkbox" id="select_all"> 
    SELECT ALL 
</div> 

function SelectAll(event) { 
    event.stopPropagation(); 

    var chk = $('#select_all')[0].checked; 
    $("[name*=\"include_\"]").each(i, element) { 
     if(! element.disabled) { 
      element.checked = chk; 
     } 
    } 
} 

$("#select_all").click(SelectAll); 
+0

나는 당신의 요점을 이해합니다. C/C++ 프로그래밍에서 jquery의 구문이 네이티브 JS보다 약간 간단하게 해석된다는 것을 알았습니다. 내 코드에 jquery가 있으면 대개 다른 사람이 제공 한 것입니다. 나는 변화를 원하지만 약속합니다. – whoasked

+1

도움이된다면 jQuery가 기본 JavaScript임을 유의해야합니다. 결국, jQuery는 단순히 자바 스크립트 라이브러리 일뿐입니다. 아직 존재하지 않는 JavaScript 언어에 구문을 도입하지 않습니다. 모든 jQuery 코드 행은 정의상 JavaScript 코드 행입니다. 전처리기를 사용하여 자체 구문을 증명하는 [JSX] (https://facebook.github.io/react/docs/jsx-in-depth.html)와는 다릅니다. 다른 라이브러리 나 코드에서 함수를 호출하는 것과 같은 방식으로 jQuery 라이브러리에서 제공하는 함수를 호출하는 것만으로 충분하다. –