2011-06-08 100 views
6

我有一个有文本框的网页。检查数组中的所有值是否相同

当用户输入信息到它,它使一个AJAX调用,看看是否条目是有效的,如果不是禁用按钮。

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

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

我能想到这样做的唯一的方法是一个1或0添加到每个文本框和一个数组一次阵列中的所有元素都是1,那么启用按钮。这是一个好方法,如果不是请解释一个更好的方法。如果这是一个好办法,我该如何检查一个JavaScript数组中的所有值是否一样?

感谢

+0

你能说清楚'当连续文本框** **模糊**'是什么意思吗? – 2011-06-08 10:44:05

+0

@Charles当模糊事件在该文本框中被触发时... – 2011-06-08 10:44:34

+0

是的,我认为将0 1设置为检查每个文本框的状态并且必须循环javascript数组才能找出哪一个是0或1 – 2011-06-08 10:45:51

回答

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'); 
});   
+0

问题是我没有检查文本框客户端的值,我只知道它的有效性来自我的AJAX请求的响应,所以我拥有的是Y或N – Jon 2011-06-08 10:59:04

+0

@Jon,对不起,我错过了AJAX要求。在这种情况下,您必须禁用'change'和'removeClass('valid')'按钮。当AJAX请求返回时,还会将'addClass('valid')'添加到输入中。一旦你这样做,只需从过滤函数中返回$(this).hasClass('valid')'。 – 2011-06-08 11:03:02

+0

如何获取引用成功方法中的AJAX调用来执行addClass(“有效”)的文本框? – Jon 2011-06-08 11:36:45

0

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

其次你的做法是得很好,但不是一个数组,你可以设置的与错误的文字输入PARAM,然后禁用按钮,如果有错误与文本的任何元素。我认为它会比循环所有文本框都快。

4

这听起来很不错。您可以使用这个简单的javascript函数检查javascript数组中的相等元素。您可以将其粘贴到萤火虫控制台以检查其功能。

// 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)); 
+0

纯粹的JavaScript和逻辑+1。 – alix 2013-04-25 14:18:03

0

我会使用验证,以实现这一目标。

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

如果你能极大验证客户端 - 无论是使用中的链接上面显示的现有jQuery验证功能中的一个,或自己编写。

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

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

相关问题