【问题标题】:JS jQuery - check if value is in arrayJS jQuery - 检查值是否在数组中
【发布时间】:2012-07-15 11:15:44
【问题描述】:

我更像是一个 PHP 人,而不是 JS - 我认为我的问题更多是语法问题..

我有一个小 jQuery 来“验证”并检查输入值。

单个单词可以,但我需要数组。

我正在使用 jQuery 的inArray()

var ar = ["value1", "value2", "value3", "value4"]; // ETC...

        jQuery(document).ready(function() {

            jQuery("form#searchreport").submit(function() {
            if (jQuery.inArray(jQuery("input:first"), ar)){ 
                      //if (jQuery("input:first").val() == "value11") { // works for single words
            jQuery("#divResult").html("<span>VALUE FOUND</span>").show();
            jQuery("#contentresults").delay(800).show("slow");
                return false;
              }

        // SINGLE VALUE SPECIAL CASE / Value not allowed 
               if (jQuery("input:first").val() == "word10") {

                jQuery("#divResult").html("YOU CHEAT !").show();
                jQuery("#contentresults").delay(800).show("slow");

                return false;
              }

        // Value not Valid

              jQuery("#divResult").text("Not valid!").show().fadeOut(1000);

              return false;
            });

        });

现在 - 这个if (jQuery.inArray(jQuery("input:first"), ar)) 工作不正常.. 我输入的每个值都将被验证为 OK。 (甚至是空的)

我只需要验证数组 (ar) 中的值。

我也试过if (jQuery.inArray(jQuery("input:first"), ar) == 1) // 1,0,-1 tried all

我做错了什么?

额外问题:如何在 jQuery 中不在数组中? (相当于 PHP if (!in_array('1', $a)) - 我觉得它不起作用,需要使用这样的东西:!!~

【问题讨论】:

  • $.inArray(...) == -1

标签: jquery arrays validation


【解决方案1】:

您正在将 jQuery 对象 (jQuery('input:first')) 与字符串(数组的元素)进行比较。
更改代码以便将输入的值(至于字符串)与数组元素进行比较:

if (jQuery.inArray(jQuery("input:first").val(), ar) != -1)

如果在数组中未找到元素,inArray 方法将返回 -1,因此您的奖励回答了如何确定元素是否不是 在一个数组中,使用这个:

if(jQuery.inArray(el,arr) == -1){
    // the element is not in the array
};

【讨论】:

  • 您的第一个 if 假设 -1 被视为虚假值?不应该是!= -1吗? +1 以获得完整答案。
  • 谢谢,我只是在修改代码 sn-p,它一定是滑倒了。
  • 好的,谢谢,效果很好。但我有一个澄清的问题 - 所以没有办法使用 inArray() 函数而不将其与 == -1 、 == 0 或类似函数进行比较??
  • 不,如果你真的想要,你可以创建自己的包装函数:function notInArray(){return jQuery.inArray.apply(this,arguments)!=-1;} 它采用与初始函数相同的参数并返回一个布尔值(如果元素不在数组);
  • 谢谢。这一切都很好。我是 JS 的真正新手。 90% 的时间都是语法错误 :-) 我很高兴现在不是 :-)
【解决方案2】:

至于你的额外问题,请尝试if (jQuery.inArray(jQuery("input:first").val(), ar) &lt; 0)

【讨论】:

    【解决方案3】:

    值检查的替代解决方案

    //Duplicate Title Entry 
        $.each(ar , function (i, val) {
            if ( jQuery("input:first").val()== val) alert('VALUE FOUND'+Valuecheck);
      });
    

    【讨论】:

      【解决方案4】:

      Array.prototype 属性表示Array 构造函数的原型,允许您将新的propertiesmethods 添加到所有Array 对象。我们可以为此创建一个原型

      Array.prototype.has_element = function(element) {
          return $.inArray( element, this) !== -1;
      };
      

      然后像这样使用它

      var numbers= [1, 2, 3, 4];
      numbers.has_element(3) => true
      numbers.has_element(10) => false
      

      请看下面的演示

      Array.prototype.has_element = function(element) {
        return $.inArray(element, this) !== -1;
      };
      
      
      
      var numbers = [1, 2, 3, 4];
      console.log(numbers.has_element(3));
      console.log(numbers.has_element(10));
      &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-13
        • 2011-12-14
        • 1970-01-01
        • 2018-12-17
        • 1970-01-01
        • 2023-03-18
        • 2012-10-26
        • 1970-01-01
        相关资源
        最近更新 更多