0
  $('#term').catcomplete({
    delay: 0,
    minLength: 2,
    source: function(request, response){
      $.post('/search/super_search', {'term': $('#term').val()}, function(data){
        if (data.length > 0) {
          response(data);
        } else  {
          response([{label: 'No Results', category:"", href:""}, {label: 'Please try your search again.', category: "", href: ""}])
        }
      });
    }
}

現在、上記のコードを持っています。結果が返されない場合にのみ発生しNo resultsます。ただし、私がする必要がNo resultsあるのは、結果がなく、ユーザーがEnterキーを押したときにのみ戻ることです。

編集: ソース メソッドからイベントにアクセスすることを検討しています。ソースメソッドでそれにアクセスする方法はありますか?

4

2 に答える 2

0

あなたの答えへのいくつかの部分:

  1. イベントに関連付けられていないsourceため、オプションを介してこれを行う方法はありません。source

  2. searchただし、オプションはイベントに関連付けられており、そのコールautocompletesearchバック関数をeventおよびuiオブジェクトに渡して検査することができます。しかし、キャッチがあります。私のテストと検索から、ほとんどの「メタ」キー押下イベント ( shiftenter、などreturn) が無視されます。

これにより、次の 2 つのオプションが残ります。

  1. termリモート スクリプトをテストして、文字列の最後の文字が改行文字かどうかを確認します。13これは、ブラウザがキープレスをキャプチャして渡すかどうかに応じて、機能する場合と機能しない場合があります。

  2. 外部イベント ハンドラーkeypressに別の関数でリッスンさせ、オートコンプリートのsearchオプションを許可するフラグを設定します。何かのようなもの:

    var getResults = false;
    
    $("#term").keypress(function(event) {
        getResults = (event.which == 13);
    });
    
      $('#term').catcomplete({
        delay: 0,
        minLength: 2,
        search: function(event, ui) {
              return getResults;
        },
        source: function(request, response){
          $.post('/search/super_search', {'term': $('#term').val()}, function(data){
            if (data.length > 0) {
              response(data);
            } else  {
              response([{label: 'No Results', category:"", href:""}, {label: 'Please try your search again.', category: "", href: ""}])
            }
          });
        }
    

今、私は個人的にこの方法に問題があります。しかし、実際のロジックよりもテスト環境に関係していると思います。これをさらに単純化する方法があるかもしれませんが、基本的な考え方は、searchオプションのコールバックが true または false を返し、これに基づいてオートコンプリートがenter起動し、イベントとしてトリガーされないという制限と組み合わされているため、別の場所でキャプチャする必要があるというものです。

それがうまくいくかどうか教えてください。

于 2012-04-16T11:42:32.303 に答える
0

文字列「結果なし」またはそのようなものをコールバック関数の変数に保存できます。結果はありません。ユーザーがEnterキーを押したときにその文字列をチェックし、「結果なし」の代わりに何も送信しません。

于 2012-04-16T09:57:18.283 に答える