2009-08-21 98 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