2013-05-14 44 views
0

我有一個搜索框和一個建議框來顯示建議。如何刪除部分用戶輸入的值並將新值添加到輸入框中

一旦用戶在搜索框中輸入內容,就會出現建議,用戶可以選擇要添加到搜索輸入框的其中一個建議。之後,用戶將能夠鍵入其他條款來接收建議等。

我可以顯示的建議和選擇的建議添加到輸入框中

可以說,用戶進入˚F那麼首先建議和用戶選擇它,那麼輸入框將是F,第一,但它應該是第一個。如果我重置輸入,我將失去其他搜索條件。

簡而言之:我想保留最後一個分號前的所有值,並在分號後刪除所有這些值。

代碼

<script type="text/javascript"> 
    function selectS(value){ 
     alert("clicked:" + value); 
     var curr = $('#term').val(); 
      if(curr) 
       curr += ";"; 
      $('#term').val(curr + value); 
    } 
.... 

<s:form id="searchForm" method="POST" enctype="multipart/form-data"> 
    <s:textfield id="term" name="term" label="Search" onkeyup="find(this.value)"/> 
</s:form> 
+1

你爲什麼問這個幹嗎? :)猜測你意識到它並不像追加那麼簡單。您需要使用replace()並知道用戶輸入的內容。或者你可以使用一個爲你做這個的庫。 – epascarello 2013-05-14 04:34:47

+0

@epascarello描述是不同的,因爲我需要知道如何刪除用戶輸入的單詞並添加新的建議。 – J888 2013-05-14 04:36:05

+1

檢查你使用「#tern」的標識嘗試使用$('#term').val(curr + value); – Dineshkani 2013-05-14 04:36:32

回答

2

我想你想要的是自動完成從Javascript UI

http://jqueryui.com/autocomplete/#multiple ...

它允許在搜索框中多個選擇。

如果由於某種原因,你不想使用它..你可以使用下面的代碼

function split(val) { 
     return val.split(/;\s*/); 
    } 

function selectS(value){ 
     alert("clicked:" + value); 
     var curr = split($('#term').val()); 
     // remove the current input 
      curr.pop();   
      // add the selected item 
      curr.push(value); 
     // add placeholder to get the comma-and-space at the end 
      curr.push(""); 

     $('#term').val(curr.join("; ");); 
    } 
+0

這是一個很好的問題,但問題是,我正在使用struts2,並且我的輸入被定義爲它也可以工作嗎? – J888 2013-05-14 04:45:23

+0

它的''在'服務器端'。在服務器端執行的'taghandlers' ..當它再次呈現給客戶端時,它的簡單的'HTML'再次呈現。試着做'View source',你會看到。 – 2013-05-14 04:48:10

0

學習基本的正則表達式。

var text = "foo"; 
var str = "asdf;qwerty;g"; 
var newStr = str.replace(/(;)?[^;]+$/,"$1" + text); 
console.log(newStr); 

同樣的事情可以用分裂進行,並加入

var text = "foo"; 
var str = "asdf;qwerty;g"; 
var parts = str.split(";"); 
parts.pop(); 
parts.push(text); 
var newStr = parts.join(";"); 
console.log(newStr);