簡體   English   中英

使用jQuery $ .inArray驗證JSON中是否存在值

[英]Using jQuery $.inArray to validate whether or not value exists in JSON

所有。

我正在嘗試使用jQuery的$ .inArray方法來驗證JSON數組中是否存在特定值。

當前,JS腳本上方有一個表單字段,用於接收用戶輸入,並且在輸入或單擊“提交”后,應根據JSON驗證該輸入。 代碼如下:

<form>
      <label for="zipcode">Enter your zipcode</label>
      <input type="text" id="zipcode" name="zipcode"> </br>
      <input id="user_info" type="submit">
</form>
<p></p>

...

$('document').ready(function(){
 $('#user_info').on("click", function(e){
  e.preventDefault();
  var zipcode = $('form').find('input[name="zipcode"]').val();
  if($.inArray(zipcode, theCodes)!==-1) {
    $("p").text("You got it!");
  } else {
    $("p").text("You don't got it!");
  }
 }); //closes click handler
}); //closes document.ready

var theCodes = [{"ZIPCode":20001,"Market":"Washington DC"},
                          {"ZIPCode":20004,"Market":"Washington DC"},
                          {"ZIPCode":20005,"Market":"Washington DC"},
                          {"ZIPCode":20006,"Market":"Washington DC"},
                          {"ZIPCode":20007,"Market":"Washington DC"},
                          {"ZIPCode":20008,"Market":"Washington DC"},
                          {"ZIPCode":20009,"Market":"Washington DC"},
                          {"ZIPCode":20012,"Market":"Washington DC"}]

如您所見,其想法是,如果用戶輸入的值與JSON數組中的值匹配,則它應返回0或更高值並觸發“您知道了!” 附加到

元件。 但是,目前,它會觸發“您不知道!”

我已經使用console.log查看zipcode變量是否被刪除或未保存,但這似乎不是問題。

任何想法如何進行?

到了深夜,我知道這段代碼不好。 但這確實滿足您的要求! 但是,我沒有使用$.InArray()因為據我所知它在這里不適用...

$('#user_info').on('click', function(){
    var IsInArr = function(needle, haystack){
        for (var i = 0; i < haystack.length; i++) {
            if (haystack[i].ZIPCode == needle) {
                return true;
            }
        }
        return false;
    };
    if (IsInArr($('#zipcode').val(), theCodes)) {
        $('p').text('You got it');
    } else {
        $('p').text('You don\'t got it');
    }
});

演示: http : //jsfiddle.net/j476sruj/

您正在嘗試將字符串值與對象數組進行比較。 這不能簡單地因為它們甚至不是同一類型,更不用說值匹配了。

您需要檢查數組中每個objectZIPCode值。

jQuery中方便使用的實用函數是$.grep() ,它將根據條件過濾數組並返回一個新數組。 如果新的過濾數組沒有長度,則沒有匹配項,否則匹配。

var zipcode= parseInt( $('#zipcode').val(),10) ;
 /* should validate string length and valid number before wasting time in folowing loop*/
var validZip=$.grep(theCodes, function(item){
            return item.ZIPCode == zipcode;
     }).length; /* use length of array as truth test */

 $("p").text( validZip ? "Valid Zip" :  'Ooops try again');

$ .grep()API文檔

var theCodes = [{“ ZIPCode”:20001,“ Market”:“ Washington DC”},{“ ZIPCode”:20004,“ Market”:“ Washington DC”},{“ ZIPCode”:20005,“ Market”:“華盛頓特區“},{”郵政編碼“:20006,”市場“:”華盛頓特區“},{”郵政編碼“:20007,”市場“:”華盛頓特區“},{”郵政編碼“:20008,”市場“: “華盛頓特區”},{“郵政編碼”:20009,“市場”:“華盛頓特區”},{“郵政編碼”:20012,“市場”:“華盛頓特區”}]

    console.log($.inArray('{"ZIPCode":20001,"Market":"Washington DC"}', theCodes));
    // output -1

就像您所做的那樣'var zipcode = $('form')。find('input [name =“ zipcode”]')。val();' 獲取輸入,但是值的類型是字符串,因此$ .inArray始終輸出-1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM