我有一个输入字段#tag_field
,我的用户在其中输入一个标记,然后我想检查JSON对象中是否存在指定的值。
下面是我正在使用的代码但不确定如何将用户输入传递给blur()
事件中的函数。
var tags = [
{
"tag": "php",
"id": "x&8j"
},
{
"tag": "ruby",
"id": "x&8jX90"
}
];
$j('#tag_field').blur(function(){
var tagMap = {};
var i = null;
for (i = 0; tags.length > i; i += 1) {
tagMap[tags[i].tagName] = tags[i];
}
var hasTag = function(tagName) {
return tagMap[tagName];
};
});
答案 0 :(得分:1)
你的意思是like this
您是否只需要获取输入的值并将其与标记对象中的名称进行比较?
$('#tag_field').blur(function() {
var tagMap = {};
var i = null;
for (i = 0; tags.length > i; i += 1) {
if (tags[i].tag == $(this).val()) alert('exist' + tags[i].id)
//Check
}
var hasTag = function(tagName) {
return tagMap[tagName];
};
});
答案 1 :(得分:1)
var tags = [
{
"tag": "php",
"id": "x&8j"
},
{
"tag": "ruby",
"id": "x&8jX90"
}
]
$(function() {
$('#tag_field').on('blur', function(e) {
var $this = $(this), val = $.trim($this.val());
if (!val) return false;
for(var i=0, l=tags.length;i<l;i++) {
if (tags[i]['tag'] === val) {
console.log('tag exists')
return tags[i]['tag'];
}
}
console.log('tag does not exist');
return false;
})
})
简化标签地图(如果可能)将使其更容易
var tags = { "php" : "x&8j", "ruby" : "x&8jX90" }
$(function() {
$('#tag_field').on('blur', function(e) {
if(tags[$.trim($(this).val())]) {
console.log('tag exists')
} else {
console.log('tag does not exist')
}
})
})
答案 2 :(得分:-1)
如果可用,您最好使用Array.some:
function tagExists(needle, haystack) {
if (Array.prototype.some) {
return haystack.some(function(element) {
return element.tag == needle
});
} else {
for(i in haystack) {
if(typeof(haystack[i]) == 'object' && haystack[i].tag == needle) {
return true;
}
}
return false;
}
}
要在特定场景中使用它,请执行以下操作:
$('#tag_field').on('blur', function() {
if(tagExists($(this).val(), tags) {
// Tag exists.
}
});
请注意,这是区分大小写的,因为我定义了它,但可以通过在String.toLowerCase()
上调用needle
以及比较期间的每个标记轻松调整。
最后,也许我过于挑剔,但你的标签地图在技术上并不是一个JSON对象;它只是一个对象数组。