2013-02-15 41 views
0

我的標題可能有點難以理解。我試圖做 jquery的自動完成功能如下:Jquery自動完成一個輸入更多值

看到這個小提琴:

http://jsfiddle.net/96Y2y/

如果用戶鍵入 「J」,他get's約亨+約翰。到現在爲止還挺好。可以說他選擇了 約翰。我想知道的是,在他選擇了約翰之後,輸入 中的所有內容都被截斷,括號內的數字除外。結果應該是這樣的:

7,

此操作的用戶應體健,啓動逗號後再次寫一個名字後, let's說,他自己的選擇輸入後寫道:「克里斯」應該看起來像:

7,9

等等。這可能嗎?

我認爲第一步是要檢查 「onfinishedselect」 行動

select: function (event, ui){ 
alert("|" + $("#targetID").val() + "|1stAlert"); 
} 

喜歡在這個帖子:jQuery UI autocomplete fire new event after selecting an item

親切的問候,並感謝您的幫助,

託尼

+0

你可以看一下http://ivaynberg.github.com/select2/作爲alternare – 2013-02-15 09:25:20

+0

你可以看看選擇2 http://jsfiddle.net/arunpjoh ny/6pMAq/ – 2013-02-15 09:50:17

回答

0

也許最好的解決辦法是把數字放在另一個不是自動完成的領域。

你可以做到這一點與這個插件的功能「onItemSelect」 https://github.com/dyve/jquery-autocomplete

+0

感謝您的回放,不幸的是,這應該只適用於一個字段。我認爲字符替換可以用select:function(event,ui){value = $(「#tags」)。val(); value = value.replace(/ \ D/g,''); $(「#tags」)。val(value); }但我掙扎的地方是用戶可以在逗號後插入新名稱的部分意味着jquery只在逗號後面接受值... – 2013-02-15 09:44:51

+0

我跟客戶端交談後,我可以使用第二個輸入。謝謝! – 2013-02-15 09:50:32

1

您可以使用代碼爲multiple values demo,有一個正則表達式來僅插入括號內的數字:

function extractLast(term) { 
    return split(term).pop(); 
} 

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

$(function() { 
    var availableTags = [ 
     "Max (1)", 
     "Paul (3)", 
     "John (7)", 
     "Jochen (11)", 
     "Chris (9)" 
    ]; 
    $("#tags") .autocomplete({ 
     minLength: 0, 
     source: function(request, response) { 
      // We trim the search term before comparing to the source 
      request.term = $.trim(request.term); 
      // delegate back to autocomplete, but extract the last term 
      response($.ui.autocomplete.filter(
       availableTags, extractLast(request.term))); 
     }, 
     focus: function() { 
      // prevent value inserted on focus 
      return false; 
     }, 
     select: function(event, ui) { 
      var terms = split(this.value); 
      // remove the current input 
      terms.pop(); 
      // add the number between parentheses for the selected item 
      var num = ui.item.value.match(/\((\d+)\)/); 
      var value = num[1]; 
      terms.push(value); 
      // add placeholder to get the comma-and-space at the end 
      terms.push(""); 
      this.value = terms.join(","); 
      return false; 
     } 
    }); 
}); 

看到這裏的jsfiddle:http://jsfiddle.net/96Y2y/2/

+0

這是完美的!太感謝了! – 2013-02-15 10:22:43

+0

嗨安德烈亞斯,關於這個的一個問題。是否有可能識別用戶是否在comme之後輸入空白字符。在這種情況下,搜索將不再起作用。換句話說,可以告訴插件在開始時忽略空白嗎? – 2013-02-15 10:32:16

+0

@tBook我修改了代碼和jsFiddle。基本上在split()函數中,需要考慮可能的空格:'val.split(/,\ s * /)',並且還需要在比較前修剪搜索項:'request.term = $。修剪(request.term)'。 如果你喜歡答案,你可以upvote :) – 2013-02-15 11:30:26