2012-07-03 383 views
1

我有一個輸入字段,#tag_field,我的用戶在這裏輸入一個標籤,然後我想檢查JSON對象中是否存在指定的值。從數組中創建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]; 
     }; 
    }); 

回答

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

你可用時最好關閉使用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. 
    } 
}); 

注意,這是按照我的定義區分大小寫,但可以通過在needle上調用String.toLowerCase()以及比較過程中的每個標籤輕鬆調整。

最後,也許我已經過分挑剔了,但是您的標記地圖在技術上並不是JSON對象;它只是一個對象數組。

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') 
     } 
    }) 
}) 
​