1

jQuery UI のオートコンプリートにバインドされたテキスト ボックスがあります。ユーザーがオートコンプリート ドロップダウンからオプションを選択すると、JSON データを使用して、リモート ソースからユーザーの詳細をフォームに入力します。

次の機能がバインドされたリセットボタンがあります。

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

searchこれは、呼び出される前に完了した少量のローカル データで機能しますclick()が、大量の外部データではsearch、時間内に完了しないため、'item' is null or not an objectエラーが発生します。

searchを呼び出す前に、が完了するまで jQuery を待機させるにはどうすればよいclick()ですか?

これは、ローカル データ ソースを使用した実用的なフィドルです: http://jsfiddle.net/3KTtT/3/

4

2 に答える 2

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/

于 2012-08-14T14:56:34.580 に答える
0

値があるかどうかを確認する遅延ループを含めるように例を変更し、クリック イベントを呼び出しました。あなたを正しい軌道に乗せるはずです:

jsFiddle デモ

以下のコードを見ると、コードをテストできるように 0 よりも大きくなっていますが、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;
    }
});
于 2012-08-14T12:20:23.107 に答える