2016-07-23 55 views
0

UPDATE 這個問題在github上here如何使TagsInput既自動完成和自由文本工作

我在引導3.問題這我遇到使用tagsinput與預輸入已經討論是在用戶選擇現有標籤的情況下的值。顯示文本顯示正確,但.val()返回其實際對象。下面是代碼

$('#tags').tagsinput({ 
         //itemValue: 'value', 
         typeahead: { 
          source: function (query) { 
           //tags = []; 
           //map = {}; 
           return $.getJSON('VirtualRoomService.asmx/GetTags?pid=' + $("#<%=hdnPID.ClientID%>").val() + '&tok=' + query) 
           //, function (data) { 
           // $.each(data, function (i, tag) { 
           //  map[tag.TagValue] = tag; 
           //  tags.push(tag.TagValue); 
           // }); 
           // return process(tags); 
           //}); 
          } 
         } 
         //freeElementSelector: "#freeTexts" 
        }); 

上面代碼的問題是,它會導致如下而從Web方法 enter image description here

發生這種情況時,用戶選擇現有的標籤讀取標籤。新標籤沒有問題。我嘗試設置tagInput的itemValue & itemText,但沒有工作。因此我決定解決這個問題。因爲我能夠得到json字符串作爲['IRDAI',Object],如果能以某種方式解析這些對象,得到實際的標籤值,然後我得到我期待的代碼的預期結果。如果我我指定的標籤識別& TagValue到項目值& itemText如下代碼

  $('#tags').tagsinput({ 
       itemValue: 'TagId', 
       itemText: 'TagValue', 
       typeahead: { 
        source: function (query) { 
         //tags = []; 
         //map = {}; 
         return $.getJSON('VirtualRoomService.asmx/GetTags?pid=' + $("#<%=hdnPID.ClientID%>").val() + '&tok=' + query) 
         //, function (data) { 
         // $.each(data, function (i, tag) { 
         //  //map[tag.TagValue] = tag; 
         //  tags.push(tag.TagValue); 
         // }); 
         //}); 
         // return process(tags); 

        } 
       } 
       //freeElementSelector: "#freeTexts" 
      }); 

那麼它出現在標籤輸入從自動填充一滴用戶選擇的翻譯:文本下來 [![IMT 進入當執行下面的代碼時結果顯示如下

var arr = junit.Tags.split(','); 

          for (var i = 0; i < arr.length; i++) { 
           $('#tags').tagsinput('add', arr[i]); 
          } 

enter image description here

enter image description here

+0

當VirtualRoomService.asmx/GetTags提供的符合現有標記的標記時,返回的結果是什麼? – Will

+0

它返回它的ID和值 – Naga

+0

好吧,但它是什麼樣子?你能提供一個例子嗎?像'[{「value」:12,「text」:「Sweet Tag」},...]'? – Will

回答

1

鑑於你例如,從數據源JSON響應:

[ 
    {"TagId":"1", "TagValue":"eSign"}, 
    {"TagId":"2", "TagValue":"eInsurance Account"} 
] 

你需要告訴tagsinput如何使用您的響應對象的屬性映射您的tagsinput配置對象中的itemValueitemText。它看起來像你可能已經開始了這條道路,但沒有得出結論,這應該是這個樣子:

$('#tags').tagsinput({ 
    itemValue: 'TagId', 
    itemText: 'TagValue', 
    typeahead: { 
    source: function (query) { 
     return $.getJSON('VirtualRoomService.asmx/GetTags?pid=' + $("#<%=hdnPID.ClientID%>").val() + '&tok=' + query); 
    } 
    } 
}); 

一定要簽出tagsinput examples

+0

這對我來說不起作用,請參考我的問題更新新屏幕截圖 – Naga

+0

我甚至嘗試將代碼更改爲$('#tags')。tagsinput('add',{TagId:1 ,TagValue:arr [i]})問題仍然存在。請參閱我的問題中的屏幕截圖 – Naga

0

這可能不是乾淨的解決方案,但我通過下面的解析方法解決了這個問題。希望這可以幫助某人。

  var items = $('#tags').tagsinput("items"); 
      var tags = ''; 
      for(i = 0; i < items.length; i++) 
      { 
       if(JSON.stringify(items[i]).indexOf('{') >= 0) { 
        tags += items[i].TagValue; 
        tags += ','; 
       } else { 
        tags += items[i]; 
        tags += ','; 
       } 
      } 
+0

我不知道你想要做什麼,但「更乾淨」可能看起來更像'var tagArr = []; ... if(typeof items [i] =='object'){tagArr.push(items [i] .TagValue)} else {tagArr.push(items [i])} var tags = tagsArr.join(', ')'但是,然後,我現在真的很困惑你到底想要做什麼。 – Will

+0

非常感謝,這更清潔。 – Naga