我正在尝试查看JSON对象中是否存在值,如果存在,则该值应放在DOM中。
在我的示例中,我在访问与数组arr中的“value”名称配对的值时遇到问题。
在最终结果中,我希望用户在文本框中键入文本,当他们选择一个选项并且选项框关闭时,该值应该放在已放置的div中。在放置值之前,它必须检查数组中是否存在该值,因此不会将gibberish放置在已放置的元素中。
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。所以,如果你能帮助我那将是伟大的。
答案 0 :(得分: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);
}
}
});
但似乎你只是想看看匹配是否存在,所以在这种情况下只使用$.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 强>