2013-04-29 6 views
1

ID가있는 레이블에서 값을 가져 오려고합니다. jQuery 사용 경험이 있지만 왜 스크립트의 첫 번째 줄에 "Uncaught TypeError : object is not function"오류가 계속 발생하는지 알 수 없습니다.jQuery typeerror 객체가 레이블에서 값을 가져올 때 함수가 아닙니다.

아이디어가 있으십니까?

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset='UTF-8' /> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
</head> 
<body> 
    <div> 
     <label id="test">Value</label> 
    </div> 
    <script> 
     jQuery(window).load(function ($) { 
      var label = $('#test'); 
      var prev = label.text(); 
     }); 
    </script> 
</body> 
</html> 

미리 감사드립니다.

답변

2

.load의 콜백에 의해 수신 된 첫 번째 인수는 이벤트 객체이다

jQuery(window).load(function ($) { 
//       ^receives a jQuery event object 

첫 번째 파라미터로 jQuery를 수신 DOM Ready handler과 혼동 될 수

//both of these would have $ as an alias for jQuery: 
jQuery(document).ready(function($){}); 
jQuery(function($){}); 

문제를 해결하기위한 세 가지 방법이 있습니다.

먼저, 경우에 $ 글로벌 범위에, 당신은 쉽게 shadowing 글로벌 $ 당신의 .load 콜백에서 $ 매개 변수의 이름을 변경/제거하여 문제를 해결할 수 있습니다.

(function($) { //aliases jQuery to $ inside this scope 
    $(window).load(function() { 
     //$ references jQuery in inner scopes too as long as you don't shadow it 
     var label = $('#test'); 
     var prev = label.text(); 
    }); 
}(jQuery)); 

를 그리고 제 3의 옵션으로, 경우에 당신은 'window 기다릴 필요가 없습니다 :

그렇지 않은 경우에 jQuery를이 noConflict 모드에서, 당신은 $ 별명에 수동으로 IIFE 래퍼를 사용할 수있다 s load 이벤트가 발생하면 대신 DOM 준비 처리기를 사용하십시오. 의 .load은 모든 리소스가 먼저로드 (이미지 포함) 될 때까지 기다리는 동안 핸들러가 먼저 (DOM 구조가 준비되는 즉시) 시작됩니다.

대부분의 경우 .ready()이면 충분하므로 페이지와 상호 작용하기 전에 마지막 이미지가로드 될 때까지 기다리지 않아도됩니다. 이제 이미지의 크기 나 비슷한 것으로 작업한다면 $(window).load()이 더 재미있을 것입니다. 실험하고보십시오.

+1

고마워요, 정확히 그랬습니다! – keltonk

0

$을 함수의 인수로 전달할 필요는 없습니다. 이렇게하면 외부 범위에서 jQuery 객체를 "숨길"수있는 로컬 변수 "$"가 생성됩니다.

그래서 $은 이벤트 (로컬 $)의 역할을 담당하며 더 이상 (외부 $) 기능을 수행하지 않으므로 오류가 발생합니다.

매개 변수없이 function()으로 전화하면 정상적으로 처리됩니다.

관련 문제