2012-06-04 28 views
0

我有一個jquery自動填充字段,我想在同一個輸入字段中添加多個值。在我看到的例子中,http://jqueryui.com/demos/autocomplete/#multiple的值和標籤是一樣的,所以事情在選擇事件中可以正常工作。然而,就我而言,當用戶選擇一個名稱時,我希望輸入框顯示標籤,但我想在提交表單時發佈這些值。爲了解決這個問題,我在表單中添加了一個隱藏字段,並且有一個單獨的數組來獲取值,但是我的問題是當用戶退出該值時。它仍然在我的陣列。任何想法如何解決這個問題?或者更好的解決方案?jquery自動完成。跟蹤值而不是標籤

var friend_data = [{"label":"JOhn Doe","value":"12345"},{"label":"Jane Doe","value":"123456"}]; 

$("#friends") 
    // don't navigate away from the field on tab when selecting an item 
    .bind("keydown", function(event) { 
     if (event.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) { 
      event.preventDefault(); 
     } 
    }).autocomplete({ 
     minLength: 0, 
     //source: friend_data, 
     source: function(request, response) { 
      // delegate back to autocomplete, but extract the last term 
      response($.ui.autocomplete.filter(
       friend_data, extractLast(request.term))); 
     }, 
     delay: 0, 
     autofocus: true, 
     focus: function(event, ui) { 
      return false; 
     }, 
     select: function(event, ui) { 
      var terms = split(this.value); 

      // remove the current input 
      terms.pop(); 
      // add the selected item 
      terms.push(ui.item.label); 
      friend_id_list.push(ui.item.value); 
      console.log(friend_id_list); 
      // add placeholder to get the comma-and-space at the end 
      terms.push(""); 
      this.value = terms.join(", "); 
      console.log(this.value); 
      return false; 
     } 
    }) 
    .data("autocomplete")._renderItem = function(ul, item) { 
     var fb_pic_path = '<img src="http://graph.facebook.com/' + item.value + '/picture?type=square">' ; 

     return $("<li></li>") 
     .data("item.autocomplete", item) 
     .append("<a>" + fb_pic_path + item.label + "</a>") 
     .appendTo(ul); 
    }; 
+0

感謝您的格式! – jtwg

+0

我看上去很高,但是我沒有看到其他人有類似的問題。奇怪的。也許我應該只是檢查每個鍵盤上的輸入字段值(帶有標籤列表),並且如果該列表中的逗號數量不匹配'id'數組長度,只彈出最後一個數字?任何想法,如果這將被視爲一個很好的解決方案? – jtwg

+0

我想你可以確定什麼應該在數組中,當該字段是「模糊」出來的,但也有一些問題,那也是 –

回答

0

一位不願張貼此,B/C我是新來的JavaScript/jQuery和這個斜面可能是做到這一點的最好辦法,但如果你是新來這是我和只是希望對於那些有用的東西,這是我現在正在使用的東西來保持同步。

$("#friends").keyup(function(event) {  
    var friend_label_count = this.value.split(",").length - 1; 
    var friend_value_count = friend_id_list.length; 
    if (friend_label_count < friend_value_count) { 
     friend_id_list.pop(); 
     } 
}); 
+0

哎呦。注意到如果用戶決定輸入一串逗號(不知道他們爲什麼會,但我猜他們可以),這不會中斷自動完成,但會打破這一點。將修復並更新一點。 – jtwg

0

我會傾向於創建鍵指向匹配值的標籤上另一個數組,並從自動完成的功能select內填充它。

而不是填充每個選擇的friend_id_list數據,我會創建值的列表作爲提交或模糊的一部分,通過拆分#friends條目並與該索引的內容進行比較(hash )。

如:(NB未經測試)

var selections = {}; //instantiated earlier 
var friend_id_list = []; 
<snip> 
select: ... 
     selections[ui.item.label] = ui.item.value; 
     ... 

$('#friends').blur(function(){ 
    var entries = $(this).val().split(', *'); // in case space character removed.. 
    var friend_id_list = []; 
    for(entry in entries){ 
     if(selections[entry]) friend_id_list.push(entry); 
    } 
    $('#myhiddenfield').val(friend_id_list.join(',')); 
}); 

凡是不符合事先自動完成的值將被丟棄。

+0

感謝您的建議。如果我正確理解這一點,則按標籤進行比較。在我的情況下,用戶的全名。我的問題是我有很多同名的朋友。這就是爲什麼我實際上不得不嘗試追加fb圖片..所以他們可以告訴誰是誰。 – jtwg

+0

我明白了。是的,這是正確的 - 它會在標籤上創建一個反向查找來恢復值。希望它能讓你一路走來;該代碼僅僅是作爲概念的一個例子。我相信它可以針對您的特定用例進行改進。請注意,您可以配置自動完成功能,以便根據需要返回的不僅僅是標籤和值。下面是我之前準備做的一個:http://stackoverflow.com/questions/7410091/jquery-autocomplete-and-php-populating-input-field-with-data-from-mysql-databas/7410353#7410353這填充城市,州和郵政領域從一個下拉式。 – RET

+0

感謝您的建議。我同意在選擇中處理得更好。將再玩一些。 – jtwg

相關問題