1

我有一个输入字段,#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];
        };
    });
4

3 回答 3

1

你的意思是这样的吗

您是否只需要获取输入的值并将其与标签对象中的名称进行比较?

$('#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];
    };
});​
于 2012-07-03T23:24:30.897 回答
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')
      }
    })
})
​
于 2012-07-03T23:46:40.000 回答
-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 对象;它只是一个对象数组。

于 2012-07-03T23:37:36.123 回答