2009-08-21 3 views
2

У меня есть несколько полей ввода, где они имеют одинаковые имена классов. Мне нужно проверить, чтобы хотя бы 1 из них не был пустым. Так что у меня есть,проверка ввода нескольких входов с использованием jquery

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

if (found != true) { 

сбщ + = "Пожалуйста, укажите по крайней мере, 1 дату перед отправкой \ п."; return false; } var calcFnd = false; $ ('. Calc'). Each (function() { if ($ (this) .val()) { calcFnd = true; } });

if (calcFnd! = True) { msg + = "Пожалуйста, предоставьте как минимум 1 расход перед отправкой. \ N"; return false; }

if (msg! = "") { alert (msg); return 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 + = "Пожалуйста, предоставьте хотя бы 1 дату перед отправкой. \ N"; return false; Не возвращайся, пока не покажешь предупреждение

+0

Работал. Я отредактирую свой код, чтобы дать именно то, что у меня есть. –

+0

Я старался не поставлять оригинальный код из-за того, что в него вступил холодный фьюжн. Если вы проверите ссылку, вы увидите, что я использую код, показанный в вашем примере. Не возвращает сообщение. Таким образом, не работает. Я верю false в конце формы submit для целей отладки. –

+1

Код не доходит до части 'alert', потому что вы уже возвращаете' false' здесь: 'msg + =" Пожалуйста, предоставьте хотя бы 1 дату перед отправкой. \ N "; return false; 'Не возвращаться, пока вы не покажете предупреждение. – Randell

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, чтобы остановить итерации.

+0

вы понимаете, что получите тот же результат. –

+0

Тот же результат? Поразмыслить? – doomspork

+0

Я дважды проверил код и протестировал его, я получаю правильный результат. Можете ли вы объяснить, почему вы отказались? – doomspork

0

Вы могли бы сделать что-то вроде этого:

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

Объяснение:

Получить все входы, сопоставьте массив просто получить значения, изменить массив в массив JS и присоединиться. Если хотя бы одно имеет значение, объединенная строка не будет пустой.

The !! просто преобразуется в логическое (может или не обязательно/желательно).

+0

Я действительно даже не хочу пытаться творить на данный момент. Это немного для чего-то подобного. Если все остальное не удастся, я дам ему шанс. –

+0

Не уверен, что вы имеете в виду ... это одна строка кода, чтобы получить логическое значение, указывающее, есть ли у вас какие-либо входы со значениями. Это только более функционально-ориентированная версия цикла в принятом ответе. – Ben

1

Здесь:

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

Это не работает. Нет ошибок, но результатов нет. Проверьте ссылку, которую я опубликовал. Таблица ... очень большая, но она состоит из .calc для всего, кроме дат. Даты состоят из .date-mask –

+0

@Michael, вы знаете, что после цикла вы должны использовать переменную 'found', правильно? – Randell

+0

Я думаю, что это может сработать. У меня было это после петли, в первую очередь, хотя .. –

Смежные вопросы