检查数组中的所有值是否相同

时间:2011-06-08 10:40:42

标签: javascript jquery

我有一个有文本框的网页。

当用户在其中输入信息时,它会进行AJAX调用以查看该条目是否有效,如果不是则禁用按钮。

他们还可以添加最多10个文本框,这是通过jQuery模板完成的。目前,每个文本框都有一个串行类,当串行文本框模糊时,它会进行检查。

如果他们输入了无效的序列,它将禁用该按钮,但是如果他们添加了一个新的文本框,并且该按钮现在已启用,则该按钮现在是错误的,因为有一个仍然无效。

我能想到的唯一方法是为每个文本框添加1或0数组,并且一旦数组中的所有元素都为1,则启用该按钮。这是一个好方法,如果不是,请解释一个更好的方法。如果这是一个好方法,我如何检查javascript数组中的所有值是否相同?

由于

4 个答案:

答案 0 :(得分:4)

这听起来像是一个很好的方法。您可以使用这个简单的javascript函数检查javascript数组中的相等元素。您可以将其粘贴到firebug控制台以检查其功能。

// check if all elements of my_array are equal, my_array needs to be an array
function check_for_equal_array_elements(my_array){
  if (my_array.length == 1 || my_array.length == 0) {
     return true;
  }
  for (i=0;i<my_array.length;i++){
     if (i > 0 && my_array[i] != my_array[i-1]) {
       return false;
     }
  }
  return true;
}

//Example:
var my_array = [];
my_array.push(5);
my_array.push(5);

// will alert "true"
alert("all elements equal? "+check_for_equal_array_elements(my_array));

my_array.push(6);
// will alert "false"
alert("all elements equal? "+check_for_equal_array_elements(my_array));

答案 1 :(得分:2)

我假设你有一个返回布尔值的isValid(str)函数。

由于您正在使用jQuery,因此只要输入模糊,您就可以利用jQuery的filter()函数轻松检查输入是否无效

$('.serial').live('blur', function () {

    // Get an array of all invalid inputs
    var invalids = $('.serial').filter(function () {
        return !isValid($(this).val());
    });

    // Does the array contain anything?
    $('#button').prop('disabled', invalids.length);

});

演示:http://jsfiddle.net/3RNV6/


类似的概念,但与AJAX一起使用:

$('.serial').live('blur', function () {
    var me = this;

    $.ajax({
       // ajax config
       success: function (data) {
           if (data === 'Y') $(me).addClass('valid');

           // Get an array of all invalid inputs
           var invalids = $('.serial').filter(function () {
               return !$(this).hasClass('valid');
           });

           // Enable if none invalid
           if (invalids.length === 0) $('#button').prop('disabled', false);
       }
    });
});

$('.serial').live('keypress', function () {
    $('#button').prop('disabled', true);
    $(this).removeClass('valid');
});        

答案 2 :(得分:0)

首先,如果您动态创建n个文本框,则应使用jQuery的live()或delegate()方法来通知添加的新DOM元素。

其次你的方法很好但是你可以用错误的文本设置输入参数而不是数组,如果有任何错误文本的元素,则禁用按钮。我认为它会比循环遍历所有文本框更快。

答案 3 :(得分:0)

我会使用验证来实现这一点。

http://docs.jquery.com/Plugins/Validation#Demos

如果您可以验证客户端的优秀 - 请使用上面链接中显示的现有jQuery验证函数之一,或者编写自己的。

如果您必须通过ajax验证服务器端,那么您可以将其构建为自定义验证例程。

然后在显示/隐藏按钮的调用中 - 调用$('#formid).validate() - 如果任何验证失败则返回false。