проверка 1 ввода нескольких входов с использованием jquery - PullRequest
2 голосов
/ 21 августа 2009

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

$('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"; вернуть ложь; } var calcFnd = false; $ ( 'Расч'). Каждая (функция () { если ($ (это) .val ()) { calcFnd = true; } });

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

if (msg! = "") { оповещения (MSG); вернуть ложь; }

 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>

Используемые имена классов: маска даты, для верхней строки дат и calc, для остальной части таблицы.

Мне нужен только 1 вход, чтобы не быть пустым, чтобы обеспечить истинное представление.

Есть идеи?

Редактировать Вот ссылка на страницу в реальном времени. То, что я проверяю, это две разные вещи, но по сути одна и та же функция. Первый ряд, даты. Также вся таблица. Если не все, ТОЛЬКО каждый вход имеет один и тот же класс.

Ответы [ 4 ]

2 голосов
/ 21 августа 2009
Код

@ 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"; вернуть ложь; Не возвращайтесь, пока не отобразите предупреждение

1 голос
/ 21 августа 2009

Здесь:

var found = false;
$('.huh').each(function(){
   if($(this).val()){
      found = true;
      return false;
   }
});
0 голосов
/ 21 августа 2009

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

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

Пояснение:

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

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

0 голосов
/ 21 августа 2009

Вы можете иметь флаг проверки, который вы установили в своем коде и отправить, если это правда.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...