2013-10-13 292 views
1

我試圖查看JSON對象中是否存在值,如果存在,值應該放在DOM中。獲取JSON對象的值

在我的示例中,我遇到了問題,獲得與數組arr中的「value」名稱配對的值。

最終結果我希望用戶在文本框中鍵入文本,並且當他們選擇一個選項並且選項框關閉時,值應放在放置的div中。在放置該值之前,必須檢查該值是否存在於數組中,這樣亂碼將不會放入放置的元素中。

var arr = [ 
     {value : "c++", price: "5.69"}, 
     {value : "php", price: "5.69"}, 
     {value : "coldfusion", price: "5.69"}, 
     {value : "javascript", price: "5.69"}, 
     {value : "asp", price: "5.69"}, 
     {value : "ruby", price: "5.69"}, 
    ]; 
    // alert(arr.value) 
$("#autocomplete").autocomplete({ 

    source : arr, 
    close : function(event, ui){ 
    var val = $('input#autocomplete').val(); 
    //Definite problem[index needed?] 
    if ($.inArray(val,arr.value) > -1) { 
     $('.placed').html(val); 
    } 

    } 
}); 

我剛開始學習JSON,並且我不確定是否檢查val是否存在於這種類型的數組中。所以如果你能幫助我,那會很棒。

jsfiddle

回答

0

您可以將普通陣列上使用$.inArray,但你必須在這裏對象的數組。所以請嘗試使用$.grep來獲得所有比賽。

close: function (event, ui) { 
      var val = $('input#autocomplete').val(); 
      var res = $.grep(arr, function (o) { //Will give you all the matches 
        return o.value.indexOf(val) > -1; 
      }); 

      if (res.length) { 
       $('.placed').html(val); 
      } 

     } 
    }); 

Demo

但好像你只是想看看是否匹配是有還是沒有那麼在這種情況下使用只是$.each

close: function (event, ui) { 
     var val = $('input#autocomplete').val(); 
     var match = false; 
     $.each(arr, function (_, o) { 
      if (o.value === val) { 
       match = true; 
       return false; //break the look once you find a match 
      } 
     }); 
     if (match) { 
      $('.placed').html(val); 
     } 

Demo

+0

謝謝你的迴應,但也許我不清楚什麼時候通過點擊頁面上其他任何地方關閉下拉框如果輸入到框中的ext與數組中的值完全不匹配,則不應將其放入放置的div中。所以在你的例子中,當我在php的輸入框中輸入p時,關閉這個框,沒有任何東西顯示在「放置」div中,但是在你的例子中「p」在div中,應該沒有p,因爲p不在數組中它是「php」。當你有機會時你能解決嗎? –

+0

@ user2537537我想你沒有檢查我的答案中的第二個例子和演示鏈接... – PSL

+0

即時檢查第二個1。我沒有看到它之前,我寫了 –