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

时间:2009-08-21 13:52:11

标签: 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 + =“请在提交前至少提供1个日期。\ n”;   返回false;  }  var calcFnd = false;  $( '计算值')。每个(函数(){   如果($(本).VAL()){    calcFnd = true;   }  });

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

if(msg!=“”){   警报(MSG);       返回false;      }

 if($('.ttlR27').val()==""){
  var net = $('.ttlR26').val();
  $('.ttlR28').val(net);
 }
 return false;

});

<cfloop from="1" to="#ArrayLen(labels)#" index="r">
<tr>
 <td class="labels <cfif labels[r] EQ "Day of Week:">row1</cfif>"><cfif ArrayIsDefined(labels,r) AND labels[r] NEQ "Open1"><cfif labels[r] EQ "Open"><input type="text" id="descript#r#" name="descript#r#" class="description descript#r#" value="Enter text here" style="width:auto;" /><cfelse>#labels[r]#</cfif></cfif></td>   

 <cfloop from="1" to="7" index="i">
  <td id="Day#i#" class="row#r# col#i#">
   <cfif r EQ 1>#Left(DayOfWeekAsString(i),3)#<cfelse><cfif r EQ 2>
   <input type="text" class="date-mask" name="dates#i#" required="yes" message="Please provide at least 1 date before submitting.">
   <cfelse>
   <input type="text" 
   <cfif labels[r] EQ "Personal Car: Mileage ##"> id="gasamount#i#" <cfelseif labels[r] EQ "Personal Car: Mileage $">id="gasmoney#i#"</cfif><cfif labels[r] EQ "Open">id="open#r#"</cfif><cfif labels[r] EQ "Daily Totals">id="dailytotals#i#"</cfif> class="all <cfif labels[r] EQ "Personal Car: Mileage ##">gasamount <cfelse><cfif labels[r] NEQ "Daily Totals">C#i# </cfif></cfif><cfif labels[r] EQ "Personal Car: Mileage $">gasmoney<cfelse>calc R#r#<cfif labels[r] EQ "Daily Totals"> </cfif></cfif><cfif labels[r] EQ "Daily Totals">ttlC#i#</cfif><cfif labels[r] EQ "Less Advance(if applicable)"> less</cfif><cfif labels[r] EQ "Net Due Employee"> net</cfif><cfif labels[r] EQ "Open"> open</cfif>" 
    <cfif labels[r] EQ "Daily Totals" OR labels[r] EQ "Personal Car: Mileage $" OR labels[r] EQ "Open1">readonly="readonly"</cfif>
    name="<cfif labels[r] NEQ "Personal Car: Mileage ##" AND labels[r] NEQ "Personal Car: Mileage $" AND labels[r] NEQ "Dates:" AND labels[r] NEQ "Open1" AND labels[r] NEQ "Daily Totals">R#r#.C#i#</cfif><cfif labels[r] EQ "Personal Car: Mileage ##">gasamt#i#</cfif><cfif labels[r] EQ "Daily Totals">celltotals#i#</cfif><cfif labels[r] EQ "Personal Car: Mileage $">gastot#i#</cfif>" /></cfif>
      </cfif>
  </td>
 </cfloop>

  <td class="totals<cfif r EQ 1>1</cfif>"><cfif r EQ 1>Total<cfelse><input type="text" <cfif labels[r] EQ "Less Advance(if applicable)">id="less"</cfif><cfif labels[r] EQ "Net Due Employee">id="net"</cfif>id="totals" class="ttlR#r#" name="totals#r#" readonly="readonly" /></cfif></td>


</tr>
</cfloop>

正在使用的类名是:date-mask,用于顶行日期,calc用于表的其余部分。

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

有什么想法吗?

修改 这是实时页面的链接。我在这里验证的是两个不同的东西,但基本上是相同的功能。第一行,日期。还有,整个表。如果不是全部,那么每个输入都有一个相同的类。

4 个答案:

答案 0 :(得分:2)

@ 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 + =“请在提交前提供至少1个日期。\ n”;返回false;在您显示警报之前不要返回

答案 1 :(得分:1)

下面:

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

答案 2 :(得分:0)

您可以在代码中设置验证标记,如果属实,则提交。

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

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

答案 3 :(得分:0)

你可以这样做:

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

说明:

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

!!只是转换为布尔值(可能是也可能不是必需/可取的)。