Javascript 使用jquery验证多个输入中的1个输入

Javascript 使用jquery验证多个输入中的1个输入,javascript,jquery,coldfusion,validation,Javascript,Jquery,Coldfusion,Validation,我有多个输入字段,它们具有相同的类名。我需要检查以确保其中至少有一个不是空的。所以我有 $('form[name=expForm]').submit(function(){ var msg = ""; var found = false; $('.date-mask').each(function(){ if($(this).val()){ found = true; } }); if (found != true) { msg+=“请在提交前至少提供一个日期。\n

我有多个输入字段,它们具有相同的类名。我需要检查以确保其中至少有一个不是空的。所以我有

$('form[name=expForm]').submit(function(){
 var msg = "";
 var found = false;
 $('.date-mask').each(function(){
  if($(this).val()){
   found = true;
  }
 });

 if (found != true)  {
msg+=“请在提交前至少提供一个日期。\n”; 返回false; } var calcFnd=假; $('.calc')。每个(函数(){ if($(this.val()){ calcFnd=真; } });

如果(calcFnd!=真){ msg+=“提交前请至少提供1笔费用。\n”; 返回false; }

如果(msg!=“”){ 警报(msg); 返回false; }

if($('.ttlR27').val()=“”){
var net=$('.ttlR26').val();
$('.ttlR28').val(净额);
}
返回false;
});
#标签[r]#
#左(星期一,3)#
全部的
正在使用的类名是:date mask(用于日期的顶行)和calc(用于表的其余部分)

我只需要1个输入不为空,以允许真正的提交

有什么想法吗

编辑
这是指向live页面的链接。我在这里验证的是两个不同的东西,但本质上是相同的函数。第一行是日期。还有,整张桌子。如果不是全部,那么大多数情况下,每个输入都有一个相同的类

您可以在代码中设置一个验证标志,如果是真的,则提交

var valid = false;
$('.huh').each(function(){
  var value = $(this).val().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  if(value.length > 0){
    valid = true;
    return false;
  }
});

each中的第一条语句将修剪空白,然后检查值的长度。如果它大于0,我们有一个值;将有效标志设置为true并返回false以停止迭代。

您可以执行以下操作:

var valid = !!$.makeArray($('input.huh').map(function() { return this.value; })).join('');
说明:

获取所有输入,映射数组以仅获取值,将数组更改为JS数组并联接。如果至少有一个具有值,则连接的字符串将不会为空

这个!!只需转换为布尔值(可能需要,也可能不需要)。

此处:

var found = false;
$('.huh').each(function(){
   if($(this).val()){
      found = true;
      return false;
   }
});

@karim79的代码应该有效。在这里,我写了一个概念证明,证明它是有效的:

剧本:

function checkFields() {
    var found = false;
    $('.huh').each(function(){
        if($(this).val()){
            found = true;
            return false;
        }
    });

    if (found == true)  {
        alert("at least one field has value");
    } else {
        alert("all fields are empty");
    }
}
涨价

<input type="text" class="huh" name="limit1" />
<input type="text" class="huh" name="limit2" />
<input type="text" class="huh" name="limit3" />
<input type="text" class="huh" name="limit4" />
<input type="text" class="huh" name="limit5" />
<input type="button" name="submit" value="Submit" onclick="checkFields();"/>

在一个干净的html上自己尝试一下这段代码,你会发现它实际上是有效的


编辑添加的代码:代码未到达警报部分,因为您已在此处返回false:msg+=“请在提交前至少提供一个日期。\n”;返回false;在显示警报之前不要返回相同的结果?想详细说明一下吗?我已经仔细检查了代码并进行了测试,得到了正确的结果。你能解释一下你为什么投了否决票吗?我返回1个警告,而不是所有警告的列表。我仍然会因为有一个真实的陈述而返回false。不起作用。这就是我的意思。我没有100点的声誉。。我不能投反对票。。谢谢。我想你的问题有一个秘密的意思,我不知道!您需要确保至少有一个不是空的,这就是代码所做的。使用您提供的5个输入,如果其中一个或多个输入的值对此不起作用,则valid为true。没有错误,但没有结果。查看我发布的链接。桌子是。。。相当大,但它是由.calc组成的,除了日期。日期包括。日期-mask@Michael,你知道你应该在循环后使用
found
变量,对吗?我现在真的不想尝试你的。像这样的东西有点贵。如果其他一切都失败了,我会试一试。不知道你的意思。。。这是一行代码,用于获取一个布尔值,指示是否有任何带值的输入。这只是接受答案中循环的一个更面向功能的版本。我将编辑我的代码以提供我所拥有的。由于涉及coldfusion,我尝试不必提供原始代码。如果您检查链接,您将看到我正在使用示例中所示的代码。不返回消息。因此,不工作。出于调试目的,我在表单提交的末尾添加了一个返回false。代码没有到达
警报
部分,因为您已经在这里返回
false
msg+=“请在提交之前至少提供一个日期。\n”;返回false在显示警报之前不要返回。
<input type="text" class="huh" name="limit1" />
<input type="text" class="huh" name="limit2" />
<input type="text" class="huh" name="limit3" />
<input type="text" class="huh" name="limit4" />
<input type="text" class="huh" name="limit5" />
<input type="button" name="submit" value="Submit" onclick="checkFields();"/>