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
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

このようなものを意味しますか

入力の値を取得して、タグ オブジェクトの名前と比較するだけでよいでしょうか?

$('#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

可能な場合は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 に答える