2012-04-07 2 views
0

"return false;" для представления формы работает для остальной части моего кода, только не в этом разделе. Любые идеи почему?"return false;" для отправки формы не работает

function checkForm() { 
    $("select[name*=lic_company]").each(function() { 
     if($(this).val() != '') { 
      var i1 = $(this).parent("td").next("td").children("select"); 
      var i2 = i1.parent("td").next("td").children("input"); 
      var i3 = i2.parent("td").next("td").children("input"); 
      if(i1.val() == '') { 
       i1.parent("td").addClass("formErrorTD"); 
       i1.addClass("formError"); 
       alert("You must enter a state for this license"); 
       return false; 
      } 
      if(i2.val() == '') { 
       i2.parent("td").addClass("formErrorTD"); 
       i2.addClass("formError"); 
       alert("You must enter an expiration date for this license"); 
       return false; 
      } 
      if(i3.val() == '') { 
       i3.parent("td").addClass("formErrorTD"); 
       i3.addClass("formError"); 
       alert("You must enter a license number for this license"); 
       return false; 
      } 
     } 
    }); 
} 

и его называют по

$("#addAgentForm").submit(checkForm); 
+0

Не могли бы вы пояснить, что вы подразумеваете под «нерабочим»? –

+0

Поскольку область '.each()' внутри 'checkForm()' возвращает false, а не 'checkForm()'. Вам нужно установить локальную переменную 'checkForm()' -scoped, установить для нее значение true, а затем внутри этих циклов установить для этой локальной переменной значение false, а затем вернуть ее из 'checkForm()'. –

ответ

3

Вы вызываете return false; в замыкание, которое является аргументом, переданным .each. Поэтому .each занимает return false;. Чтобы обойти эту проблему вам нужно нужно иметь логический флаг, который содержит состояние вида:

function checkForm() { 
    var okay = true; 

    $("select[name*=lic_company]").each(function() { 
    ... 
     return okay = false; 
    ... 
    }); 

    return okay; 
} 

И все будет работать нормально.

+0

, что имеет смысл и работает отлично, спасибо! – xjx424

+0

Майк Тейлор: Добро пожаловать! Вы также должны щелкнуть контур галочки рядом с ответом, чтобы пометить его как правильно. Вы также можете увеличить его, если вам это нравится :) –

1

Ваших return false заявления внутри анонимной функции передается .each(), поэтому только возвращать значение из этой функции, а не весь вызов checkForm().

0

Если бы я должен был догадаться, это потому, что вы возвращаетесь из функции, переданной каждому вашему вызову, то есть все, что вы действительно делаете, это выход из каждой функции, в то время как ваша основная функция проверки завершается без заминки.