0

저는 현재 프로젝트를 위해 Jquery를 공부하기 시작했습니다. Jquery 객체의 선택자와 리스너에 대해 혼란스러워합니다.Jquery 선택기 및 이벤트 수신 논리?

$("input").change(function() { 
    alert("Handler for .change() called."); 
}); 

http://api.jquery.com/change/이 정확한 복사본은 ... 나는 ".target"에서 "입력"에서 선택을 변경했습니다.

그러나 입력 이벤트는 change 이벤트에 의해 처리되지 않습니다.

이 오류가 발생합니다. 그리고 나는 꽤 입력 이름이있는 요소가 있다고 확신한다.

"Uncaught TypeError : null functions.js : 378 (익명 함수)의 'change'속성을 읽을 수 없다".

논리가 잘못되었거나 구문 오류가 있습니까? 이 오류를 많이 좁히지 만 여전히 문제가 보이지 않습니까?

------ EDIT ------

나는 모든 답변을 테스트합니다. jquery 선택자를 통해 요소에 할당 된 이벤트 처리기/수신기. 코드가 실행될 때 아래

$("selectorStatement").EventHandlerShortCut(function() { 
    //Some code 
}); 

$("input").change // Change handler for ALL INPUT elements 

JQUERY 엔진 얻을 모든 입력 요소 (! 선언 순간 -THE 순간 핸들러 executed- !! 존재되는 모든 입력 요소)

그 이후에 새로운 요소가 생성되면 Handler는이를 인식하지 못합니다. 이것을 방지 할 수있는 유일한 방법은 $ (document) .ready를 사용하여 전체 문서를 만든 후에 코드를 호출하는 것입니다. @Henrik Peinar, @Chandrika Prajapati, @GZ, @Gaurav, 그들의 답변에서 언급 @Mzn ...으로

이 외에도, 내 경우 는

나는

를 사용하여 몇 가지 입력을 생성
document.anElement.innerHTML = "<foo></foo>" 

문서가 준비된 후에 사용됩니다. 이 경우에는 2 가지 방법이 있습니다.

이 foo 요소는 문서가 렌더링되는 동안 생성 될 수 있습니다. 사용하여

display:none 

문서가 준비되면 jquery 엔진에서 요소를 읽을 수 있습니다. 온다 때 볼 수 있습니다.

또는.

$("fooSelector").handlerType(... 

페이지가 동적 인 동안 처리기 호출자를 다시 호출 할 수 있습니다. 쉬운 해결책이지만 쉽지는 않습니다.

+0

이 줄은 페이지 맨 아래에 있어야합니까? (입력 요소가 선언 된 후) – user2102266

+1

언급 한 user2102266처럼이 스크립트가 실행될 때 실제로 입력이 있는지 확인하십시오. 스크립트를 다음으로 묶을 수 있습니다 : $ (document) .ready (function() {}); –

+0

이 오류를 피할 수있는 유일한 방법은 쿼리 할 때 요청한 요소를 DOM에 준비시키는 것입니다 –

답변

1

귀하의 선택기가 결과를 반환하지 않습니다 (null).

마크 업 준비가 완료되면이 함수가 호출되는지 확인하여 문서가 완전히로드되면 명령문을 실행합니다.

다음 사용하십시오 :

$(function() { 

$("input").change(function() { 
    alert("Handler for .change() called."); 
}); 


}); 

$ (함수() {...})는 $ (문서) .ready (함수() {...})에 equivilant이다;

1

DOM에 요소가 이미있는 경우이 함수를 호출해야합니다.

단계를 수행합니다

DOM의 요소 DOM이로드

<input type="text" /> 

만들기, 전화 자바 스크립트 코드

$("input").change(function() { 
    alert("Handler for .change() called."); 
}); 

여기에 당신의 코드에서 jsfiddle을하고있다 http://jsfiddle.net/s3n57/

1

나는 귀하의 의견이 Should these lines be at the bottom of the page? (after input elements declared)라고 생각합니다. 엔.

$("input") jQuery는 DOM (문서 객체 모델)을 확인하고 모든 입력 요소를 가져다줍니다. DOM이 아직 구축되지 않았기 때문에 아무 것도 없습니다. 그래서 당신은 올바른 방향으로 생각하고 있습니다.

일반적으로 문서가 준비 될 때까지 기다리는 것이 일반적입니다. jQuery를이 정말 쉬우 며이 같이 어디서나 코드를 입력 할 수 있습니다

<script> 
$(function(){ 
    //do "on document ready" things. 

}); 
</script> 

위의 코드를 다음과 말하는 멋진 방법입니다 참고 : 그들은 동일

<script> 
    $(document).ready(function(){ 
     //do "on document ready" things. 

    }); 
</script> 

단지, 첫 번째 글자는 글자 수가 적습니다.