0

テキストエリアの最後の 3 語だけをサーバーに送信し、ユーザーが入力し続けられるように最適な結果を自動入力することは可能ですか (Google オートコンプリートと同様)?

動作を次のようにしたい:

  1. N [新]
  2. 新しい[er]
  3. New(スペース)[er]
  4. ニュー[ヨーク]
  5. 新しい c [ar]
  6. 新しいねこ【エサ】
  7. 新しい猫 ( TAB ) [食べ物]
  8. 新しいキャットフード【作る】
  9. ...
  10. 猫の【健康】に良い新しいキャットフード

(明確化: [角括弧] は自動的に入力される提案を示し、太字のテキストはサーバーに送信される部分を示し、( TAB ) および ( SPACE ) はタブとスペース キーの押下を示します)

次の単語を予測するための機能 (マルコフ連鎖を使用) が既にサーバー上にあり、jQuery UI オートコンプリートを統合していますが、現在はすべてのテキストをサーバーに送信し、選択するすべての候補を含むリストを作成するだけです。選択すると、テキスト全体が変更されます。

したがって、最終的には次の問題になります。

  1. 最後の部分だけを送るには?
  2. 提案された単語を追加して選択する方法は?
  3. Tabキーで選択するには?
4

1 に答える 1

2

わかりました-これが解決策です(そしてここに結果があります):

1 + 2: 1 つの入力ボックスを管理する代わりに、同じサイズのテキストエリアを 2 つ使用します。最初の ( #text-area) は有効で背景が透明で、もう 1 つの ( #suggestions) は無効でテキストの色が灰色です。コールバックを使用sourceしてすべての作業を行います。

$('#text-area').autocomplete({ ...

source: function( request, response ) {
        if (request.term.length < 3) {
          return false;
        }
        $.getJSON( $SCRIPT_ROOT + '/_get_word', {
          term: request.term
        }, function(data) {
            $('#suggestions').val(data.result) //suggestion is the disabled textarea
          }
          );
        return false;
      }, 
 ...
    });
});

3: タブ キーの選択は、オートコンプリート検索イベントをトリガーして行われます。

$('#text-area').live( "keydown",'textarea', function( event ) {
        if ( event.keyCode === $.ui.keyCode.TAB) {
          event.preventDefault();
          $('#text-area').val($('#suggestions').val());
          $("#text-area").autocomplete('search', $('#text-area').val());
      }
});
于 2012-08-01T12:44:52.250 に答える