2013-05-14 42 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);