2012-11-19 1 views
3

document.ready 안에 함수를 선언하면 오류가 발생합니다. 그것은 오류를 줄 것이다이document.ready 내에서 선언 된 함수는 정의되지 않았습니까?

$(document).ready(function(){ 
    function updateSizeOptions() 
    { 
     alert("updateSizeOptions"); 
    } 

    var jGrid = $("#list_main"); 
    jGrid.jqGrid({ 
     url:'db.php?ajaxOp=getData', 
      colModel:[ 
       $.extend(true, 
       { name:'shape_id' 
        ,index:'shape_id' 
        ,edittype:'select' 
        ,formatter:'select' 
        ,editoptions: { onclick:"javascript:updateSizeOptions();" } 
       } 
       ,{} 
      ] 
     .... 
}); 

처럼 "ReferenceError가 : updateSizeOptions이 정의되어 있지 않습니다."
하지만 document.ready 외부로 함수를 옮기면 모든 것이 잘 동작합니다. 왜이

function updateSizeOptions() 
{ 
    console.debug("updateSizeOptions"); 
} 

$(document).ready(function(){ 
    var jGrid = $("#list_main"); 
.... 

처럼
?

답변

7

자바 스크립트에서 다른 함수 내에서 선언 된 함수는 로컬 참조이며 부모 함수의 범위 밖에서는 볼 수 없습니다. 당신이 $(document).ready에 전달 된 익명 함수 내부의 기능 updateSizeOptions를 정의하기 때문에

window.updateSizeOptions = updateSizeOptions; 
+0

아 ... 알았어. 그리드를 만들 때 jqgrid 플러그인은 전역 범위에서 함수를 찾을 수 없기 때문에. 오, 이런 .. 하루가 걸렸어! 대단히 감사합니다. –

0

: 당신이 당신의 updateSizeOptions 기능은 전 세계적으로 액세스 할 수 있도록하려는 경우, 당신은 말한다, 글로벌 네임 스페이스에 대한 참조를 할당 할 window 속성을해야합니다 , updateSizeOptions은 익명 함수를 내 보내지 않는 한 해당 익명 함수 내에서만 사용할 수 있습니다. 그것은을 보여줍니다 전역 범위에서 함수를 정의하고 alert(window.updateSizeOptions)을 할 경우에 당신이 볼 수 있도록 (즉 window.updateSizeOptions = updateSizeOptions는)

기능 (및/또는 변수) 전역에 정의 된 그대로의 window 객체에서 을 정의 기능. window.updateSizeOptions == updateSizeOptionstrue을 반환합니다.

그러나 로컬 범위 내에서 정의하면 undefined이 표시됩니다.

0

범위. $(document).ready 안에 무언가를 넣으면이 이벤트가 트리거 될 때 코드가 실행되고 이벤트 내에 선언 된 변수와 함수 같은 것이 전역으로 설정되지 않는 한 이벤트 외부에 존재하지 않습니다. 당신이 javascript:updateSizeOptions();을 수행 할 때

는이 경우 존재하지 않는에있는 전역 범위에서 함수를 찾습니다, 그에 undefined.

관련 문제