0

でデータを取得するときにJavascriptをオートコンプリートライブラリに問題がある:私はEnterキーを押すことにより、オートコンプリートのドロップダウンを使用しようとするとは、私は次のコードでの問題に実行しているよgetJSON

var setupSearch = { 


searchSuggest: function(field) { 
    $.getJSON('/get-all-journals', {'url':'on'}, function(data) { 

     var SHCount = Number($.cookie('SHCount')); 
     var SHArray = new Array(); 
     for (i=1; i <= SHCount; i++) { 
      SHArray.push($.cookie('SH'+i)); 
     } 
     $(field).ddautocomplete(removeDuplicate(SHArray), data.response.docs, { 
      matchContains: true, 
      max: 5, 
      cacheLength: 5000, 
      selectFirst: false, 
      scroll: false, 
      formatResult: function(str) { return str; }, 
      formatItem2: function(item) { 
       return item.journal_display_name; 
      }, 
      formatMatch2: function(item) { 
       return item.journal_display_name; 
      }, 
      formatResult2: function(item) { 
       return item.journal_display_name; 
      } 
     }); 
    }); 
}, 



searchForm: function(form) { 

    var field = form.find('textarea'); 
    // Setup query field for default text behavior 
    // setupField(field); 

    setupSearch.searchSuggest(field); 
    field.autogrow(); 

    field.keydown(function(e) { 
     if (e.keyCode == 13) { 
      form.submit(); 
      return false; 
     } 
    }); 

    // Make all forms submitting through Advanced Search Form 
    form.submit(function(e) { 
     e.preventDefault(); 
     setupSearch.submitSearch(form, field); 
    }); 
}, 


submitSearch: function(form, field) { 
    if (advancedSearch.checkMinFields() || (!field.hasClass('defaultText') && field.val() != '')) { 
     // Sync the refine lists 
     // syncCheckboxLists($('#refineList input'), $('#advancedRefineList input')); 
     form.find('button').addClass('active'); 
     $('#advancedSearchForm').submit(); 
    } else { 
     $('#queryField').focus(); 
    } 
}, 

、ヒットするようです私が入力したものをフォームに提出する「競合状態」は、テキストフィールドに場所をオートコンプリートするものではありません。 form.submit()がオートコンプリートをテキストフィールドに塗りつぶすためにイベントの順序を制御できる方法はありますか?

答えて

0

実際のオートコンプリートドロップダウンメニューは、テキストボックスの下に配置されるようにフローティングされたスタイル付きリスト(または他の要素)で表されている可能性が非常に高いです。送信時に、オートコンプリートメニューが破棄されるか隠されるかを関数が待機するようにします(最大2〜2回)。これにより、データが送信される前に、プラグインがテキストボックスに入力する時間が確保されます。あなたがフォームを送信し、コールバックの内側に提出コードを置くこと

$("#myDropdown").bind("autocompleteclose", function(){ 
    // Continue with submitting your form 
}); 

が使用:

EDIT

はこのような何かを試してみてください。そうすれば、フォームを送信する前にオートコンプリートが終了するのを待つことになります。あなたは長い遅延の後にそれが送信されるのを防ぐためにこれに何らかの種類のタイムアウトを追加したいでしょう。

+0

私はjQueryオートコンプリートプラグインを使用していますが、2つのデータセットを許可するように変更しました。どの機能を待つことをお勧めしますか?フォーム送信機能?そして、私はsetTimeoutを使ってこれを行うでしょうか? –

+0

数十があります。 jQuery UIの組み込みUI(http://jqueryui.com/demos/autocomplete/)ですか? –

+0

http://docs.jquery.com/UI/Autocompleteは私が使用しているものです。 –

関連する問題