2012-08-14 3 views
1

jQuery UI의 자동 완성에 바인딩 된 텍스트 상자가 있습니다. 사용자가 자동 ​​완성 드롭 다운에서 옵션을 선택하면 JSON 데이터를 사용하여 양식을 원격 소스의 사용자 세부 정보로 채 웁니다.jQuery UI 자동 완성 검색 이벤트가 완료 될 때까지 대기

나는 바인드 다음과 같은 기능을 가진 리셋 버튼이 있습니다

$('#btn_reset').on('click', function() { 
    $('#txt_name').autocomplete('search'); 
    $('.ui-menu-item').children().eq(0).click(); 
    return false; 
}); 

이 그러나 외부의 많은 양의 데이터와,라고 click() 전에 완료 search 같은 지역 소량의 데이터와 함께 작동 , search이 완료되지 않아서 'item' is null or not an object 오류가 발생합니다.

에 전화하기 전에 search이 완료 될 때까지 jQuery를 대기 시키려면 어떻게해야합니까? 여기

은 로컬 데이터 소스를 사용하여 작업 바이올린입니다 : http://jsfiddle.net/3KTtT/3/ 나는 그것이 가치가 있는지 확인하는 지연 루프를 포함하도록 예제를 변경 한 후, 나는 당신의 클릭 이벤트라고

답변

1

해결 방법은 함수를 자동 완성이라는 open 이벤트에 바인딩하여 부울 변수를 검사하여 양식을 재설정할지 여부를 결정하는 것입니다.

var reset = false; 
$(function() {  
    $('#txt_name').autocomplete({ 
     source: [{"label":"john smith","address":"19 Tree Lane"}], 
     delay: 0, 
     autoFocus: true, 
     open: function() { 
      if(reset){ 
       $('.ui-menu-item').children().eq(0).click(); 
       reset = false; 
      } 
     }, 
     select: function(event, ui) { 
      $('#txt_address').val(ui.item.address); 
     } 

    }); 

    $('#btn_reset').on('click', function() { 
     reset = true; 
     $('#txt_name').autocomplete('search'); 
     return false; 
    }); 

}); 

는 바이올린 여기를 참조하십시오 : http://jsfiddle.net/RVnkz/2/

+0

멋진 사람. 다행 이군. 지금은 원격 데이터와 잘 작동합니까? – jjay225

+0

완벽하게 작동합니다 :) 기본 원격 JSON 데이터 소스를 사용하여 원본 피들을 게시했지만 아무런 도움이되지 않았습니다 ... 도움을 주셔서 다시 한 번 감사드립니다. btw – Elliott

+0

좋은 직장 Elliott :) 안녕하세요. – jjay225

0

. 바른 길에 당신을 넣어해야 : 당신이 아래의 코드를 보면 내가 0보다 큰이 너무 코드를 테스트 할 수 있지만, 그것이 있어야있어

jsFiddle Demo

1 미만

$('#btn_reset').on('click', function() { 
    $('#txt_name').autocomplete('search'); 
    if($('#txt_name').val().length>0) //THIS LINE 
    { 
     CheckValue(); 
    } 
    else 
    {      
    $('.ui-menu-item').children().eq(0).click(); 
    return false; 
    } 
}); 
+0

'CheckValue'는 그것이이 있음을 발견하기 때문에 – Elliott

+0

예를 잘 먹으 렴 '해고 :(() 클릭'전에 1500의 지연을 하나를 추가 할 것 "txt_name"에 대한 값이 있습니다. "로드 됨"이 1이 아니면 CheckValue()가 다시 호출됩니다. 변경된 [jsFiddle] (http://jsfiddle.net/jjay225/3KTtT/20)을 확인하십시오. /) - "로딩"을 0으로 설정하고 console.log를 추가하여 얼마나 많은 시간이 걸렸는지 보여줍니다. – jjay225

+0

도움을 주신 것에 감사드립니다. 그러나 완전히 다른 방법을 찾았습니다. 자동 완성 열기와'click()'사이에 지연이 없습니다. 나는 두 번째 대답으로 게시 할 것이다 – Elliott

관련 문제