2013-10-13 5 views
1

Я пытаюсь проверить, существует ли значение в объекте JSON, и если оно существует, значение должно быть помещено в DOM.Получение значения объекта JSON

в моем примере У меня возникают проблемы с получением доступа к значению, которое сопряжено с именем «значение» в массиве arr.

В конечном итоге я хотел бы, чтобы пользователь напечатал текст в текстовом поле, и когда они выберет опцию, а окно опции закрывается, значение должно быть помещено в помещенный 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

Спасибо за ваш ответ, но, возможно, я был неясен, когда раскрывающийся список закрыт, нажав в другом месте на странице t ext, который был введен в поле, не следует помещать в помещенный div, если он точно не соответствует значению в массиве. поэтому в вашем примере, когда я набираю p в поле для php, закройте окно, ничего не должно появляться в «помещенном» div, но в вашем примере «p» находится в div, не должно быть p, поскольку p не было в массиве это «php». можете ли вы исправить это, когда получите шанс? –

+0

@ user2537537 Я думаю, что вы не проверили второй пример и демонстрационную ссылку в моем ответе ... – PSL

+0

я проверил второй 1 сейчас. Я не вижу этого, прежде чем я написал, что –

Смежные вопросы