2009-08-21 108 views
2

我有多个输入字段,他们有相同的类名。我需要检查以确保其中至少有一个不是空的。所以我得到了,使用jquery验证多个输入的1个输入

$('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 = false; ($(this.val()){ calcFnd = true; } });

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

如果(msg!=“”){ alert(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> 

正在使用的类名是:日期面罩,日期和钙的顶行,该表的其余部分。

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

任何想法?

编辑 这里是活动页面的链接。我在这里验证的是两个不同的东西,但本质上是相同的功能。第一行,日期。此外,整个表。如果不是全部,大部分每个输入都具有相同的类别。

回答

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 + =“请在提交前提供至少一个日期。\ n”;返回false;不要回来,直到你已经显示了警报

+0

正在工作。我将编辑我的代码以准确地提供我所拥有的。 – 2009-08-21 15:15:59

+0

由于涉及coldfusion,我试图不必提供原始代码。如果您检查链接,您会看到我正在使用示例中显示的代码。不返回消息。因此,不工作。为了调试目的,我在表单提交结尾处放置了一个返回false。 – 2009-08-21 15:20:59

+1

代码没有达到'alert'部分,因为您已经在这里返回'false':'msg + =“请在提交前至少提供一个日期。\ n”;返回false;'直到你显示警报后才返回。 – Randell 2009-08-21 15:37:00

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,我们有一个值;将有效标志设置为true并返回false以停止迭代。

+0

你意识到你会得到相同的结果。 – 2009-08-21 14:02:45

+0

相同的结果?谨慎阐述? – doomspork 2009-08-21 14:08:41

+0

我已经仔细检查了代码并进行了测试,我得到了正确的结果。你能解释为什么你低估了吗? – doomspork 2009-08-21 14:13:37

0

你可以做这样的事情:

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

说明:

获取所有的输入,地图数组刚刚得到的值,数组更改为JS数组和加入。如果至少有一个值有值,则连接的字符串不会为空。

!!!只是转换为布尔值(可能或可能不需要/可取)。

+0

我现在真的不想尝试你的。对于这样的事情有点过分。如果一切都失败了,我会给它一个镜头。 – 2009-08-21 14:25:50

+0

不确定你的意思...它是一行代码来获得一个布尔值,指示你是否有任何输入值。 这只是接受答案中循环的更多功能导向的版本。 – Ben 2009-08-21 20:10:26

1

这里:

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

这甚至不适用于此。没有错误,但没有结果。检查我发布的链接。这个表格非常大,但除了日期之外,它包含了所有的一切.calc。日期由.date-mask – 2009-08-21 14:22:51

+0

@Michael组成,你知道你应该在循环之后使用'found'变量,对吧? – Randell 2009-08-21 14:31:50

+0

我认为这可能有效。尽管我在循环之后拥有它.. – 2009-08-21 14:36:23