2012-07-28 64 views
0

是否可以向服務器發送textarea中最後3個單詞並自動填充最佳結果,讓用戶繼續輸入(類似於Google自動完成)?類似Google的jQuery UI自動完成

我想要的行爲是:

  1. ň [EW]
  2. [ER]
  3. 新(SPACE)[ER]
  4. [York]
  5. New c(AR)
  6. 新貓 [食品]
  7. 新貓(TAB)[食品]
  8. 新貓糧 [使得]
  9. ...
  10. 新貓糧是好的爲你的貓的 [健康]

(澄清:[方括號TS]表示,它會自動被鍵入的建議,粗體文字表示部分被髮送到服務器,(TAB)和(SPACE)表示Tab和空格按鍵)

我已經在服務器上有預測下一個單詞的函數(使用馬爾科夫鏈),並且我已經集成了jQuery UI自動完成功能,但是目前它只是將所有文本發送到服務器,並創建一個包含所有可供選擇的建議的列表,一旦選擇它改變了整個文本。

所以它最終涉及到這些問題:

  1. 如何發送只有最後一部分?
  2. 如何追加+選擇建議的單詞?
  3. 如何選擇Tab鍵?

回答

2

好 - 這裏是溶液(和這裏是result):

1 + 2:而不是管理單個輸入框的,我使用兩個相同大小的textarea的,第一(#text-area)是使並具有透明背景,另一個(#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()); 
     } 
}); 
:TAB鍵選擇與觸發自動完成搜索事件做