2011-03-15 4 views
0

아래 코드가 있습니다. 당신이 볼 수 있듯이 jqueryautocomplete의 alert 함수에서 변수 클라이언트를 사용하려고합니다.jquery 자동 완성의 result() 함수에서 전역 변수의 값을 얻으려고 시도합니다.

문제 : 자동 완성 드롭 다운 메뉴에서 항목을 선택하면 var 값 대신 "정의되지 않은 값"이 인쇄됩니다. 왜? 전역 변수 아니다

jQuery(document).ready(function() { 

    var clients = 0; 

    alert(clients); //this prints 0. 

    jQuery("#user_autocomplete") 
    .autocomplete('autocompleteUser', jQuery.extend({}, { 
    dataType: 'json', 
    parse: function(data) { 

     var parsed = []; 
     for (key in data) { 

    parsed[parsed.length] = { data: [ data[key], key ], value: data[key], result: data[key] }; 
     } 

     return parsed; 

     } 
    })) 
    .result(function(event, data) { 
    $('#field_users').append('<div class="user_choosen" id=' + data[1] + '>' + data[0] +'<a class="link_delete_user" href="#" onclick="javascript:deleteUser(' + data[1] +')">Delete</a></div>'); 
    $('#user_autocomplete').val(''); 

    alert(clients); //this prints undefined 

    }); 

}); 

감사

하비

답변

1

, 즉 문서가 준비되면 익명 함수 실행의 범위에 정의 된 변수입니다.

익명 함수를 실행할 때 범위가 손실되어 자동 완성의 결과 메서드에 전달 될 수 있다고 생각합니다.

+0

감사하지만 "익명의 기능"은 무엇입니까? ready() 함수에서 변수를 꺼내면 문제는 동일합니다. – ziiweb

+0

익명 함수는 함수 이름이없는 함수입니다 (예 : function() {...} ) 코드의 예제 구현을 어딘가에서 제공 할 수 있습니까? 우리는 그것을 테스트 할 수 있습니까? 나는 고객이 그 시점에서 정의되지 않은 것을 반환하는 이유를 놓치고있다. – JaredMcAteer

+0

좋아, 이제 작동한다. 나는 방금 "var clients = clients + 1;"줄을 가지고있다. 두 번째 "경고 (클라이언트)"바로 아래에 있습니다. 그냥 "var"을 제거하면 작동합니다. 저에게 놀라운 것은 Chrome 관리자가 오류를 표시하지 않는다는 것입니다 ... – ziiweb

관련 문제