检查输入值是否等于数组中的值时出现问题

时间:2015-06-20 14:15:43

标签: javascript

我似乎无法使此代码生效(即让isInArray(userZipCode,chicagoZipCodes)返回true

  var chicagoZipCodes = [ 60018, 60068, 60176, 60601, 60602, 60603, 60604, 60605, 60606, 60607, 60608, 60609,
                          60610, 60611, 60612, 60613, 60614, 60615, 60616, 60617, 60618, 60619, 60620, 60621,
                          60622, 60623, 60624, 60625, 60626, 60628, 60630, 60631, 60632, 60634, 60636, 60637,
                          60639, 60640, 60641, 60642, 60643, 60644, 60645, 60646, 60647, 60649, 60651, 60652,
                          60653, 60654, 60655, 60656, 60657, 60659, 60660, 60661, 60706, 60707, 60714 ]

  function isInArray(value, array) {
    return array.indexOf(value) !== -1
  }

  elem.bind('change', function(e) {
    userZipCode = $('#zipCode').val();

    alert(isInArray(userZipCode,chicagoZipCodes));

    if ( !(isInArray(userZipCode, chicagoZipCodes)) && (userZipCode.length > 4) ) {
      // success
      alert("Sorry, that is not a Chicago area zip code! :(");
      e.stopImmediatePropagation();
    }
  })

3 个答案:

答案 0 :(得分:4)

看起来比较数字和字符串

function isInArray(value, array) { 
        return array.indexOf(parseInt(value,10)) !== -1 
 }

答案 1 :(得分:1)

在使用indexOf()函数之前解析你的$('#zipCode')。val()。

return array.indexOf(parseInt(value);

答案 2 :(得分:1)

从DOM返回的所有值都是字符串,因此您需要将它们转换为数字。您可以通过几种方式执行此操作,但最直接的方法是使用Number作为函数而不是构造函数。

 var chicagoZipCodes = [60018, 60068, 60176, 60601, 60602, 60603, 60604, 60605, 60606, 60607, 60608, 60609,
   60610, 60611, 60612, 60613, 60614, 60615, 60616, 60617, 60618, 60619, 60620, 60621,
   60622, 60623, 60624, 60625, 60626, 60628, 60630, 60631, 60632, 60634, 60636, 60637,
   60639, 60640, 60641, 60642, 60643, 60644, 60645, 60646, 60647, 60649, 60651, 60652,
   60653, 60654, 60655, 60656, 60657, 60659, 60660, 60661, 60706, 60707, 60714
 ]

 function isInArray(value, array) {
   return array.indexOf(value) !== -1
 }

 elem.bind('change', function(e) {
   // All values returned from the DOM are strings
   // so we need to convert them to a number
   userZipCode = Number($('#zipCode').val());

   alert(isInArray(userZipCode, chicagoZipCodes));

   // Check length first since all Chicago zips listed are greater than 4 digits
   // Saves the more expensive check of searching the array for
   //   only zips that are greater than 4
   if ((userZipCode.length > 4) && !(isInArray(userZipCode, chicagoZipCodes))) {
     // success
     alert("Sorry, that is not a Chicago area zip code! :(");
     e.stopImmediatePropagation();
   }
 });