2009-11-04 3 views
0

Я планирую показывать/скрывать divs для проверки формы. Но divs показывают только секундную разметку, а затем форму отправляется ...Почему эта форма все еще отправляет после возврата false?

Любые идеи, почему?

вот код:

function validateForm() { 
var name = nameEmpty(document.getElementById("annonsera_name")); 
if (nameEmpty(name)){return false;} 
return false; 
    } 
function nameEmpty(fld){ 
    if (fld.value==0) { 
     document.getElementById("annonsera_nameempty_error").style.display='block'; 
     document.getElementById("annonsera_namenotvalid_error").style.display='none'; 
     document.getElementById("annonsera_name").focus(); 
     return false; 
    } 
    else if (fld.value.match(alphaExp)) { 
     document.getElementById("annonsera_namenotvalid_error").style.display='block'; 
     document.getElementById("annonsera_name").focus(); 
     document.getElementById("annonsera_nameempty_error").style.display='none'; 
     return false; 
    } 

     document.getElementById("annonsera_nameempty_error").style.display='none'; 
     document.getElementById("annonsera_namenotvalid_error").style.display='none'; 
    return false; 

      } 

и вот форма:

<form name="annonsera" id="annonsera" method="post" enctype="multipart/form-data" onSubmit="return validateForm();"> 
+1

Возможно, у вас есть ошибка javascript, которая прерывает функцию и вызывает отправку формы как обычно. – davethegr8

+0

спасибо, решил это .... :) – 2009-11-04 17:45:40

ответ

1

Это, вероятно, генерируется ошибкой, и поэтому никогда не возвращается ничего. Предполагая, что вы используете Firefox, вы проверили консоль javascript?

Я вижу то, что выглядит как проблема здесь, где вы звоните nameEmpty() дважды - один раз с полем, а другой раз с (предположительно?) Логическим значением:

var name = nameEmpty(document.getElementById("annonsera_name")); // Returns boolean 
if (nameEmpty(name)){return false;} // Tries to pass boolean back into nameEmpty? 
0

Может быть, немного оффтоп , но здесь идет ...

Вы должны действительно рассмотреть JQuery Validation, это приятно, чисто и легко реализовать. Я сделал это несколько раз и никогда не оглядывался назад. Это, безусловно, превосходит метод ручной проверки, такой как тот, который вы используете :)

Проверьте example, действительно не так много кода для написания, чтобы получить подтверждение.

В вашем примере, что будет (не проверено):

<script> 
    $(document).ready(function(){ 
    $("#annonsera").validate({ 
     rules: { 
     annonsera_name: { 
      required: true, 
      minlength: 1 
     } 
     }, 
     messages: { 
     annonsera_name: { 
      required: "You need to write your name", 
      minlength: jQuery.format("At least {0} characters required!") 
     } 
     } 
    }) 
    }); 
</script> 

Есть также много способов настройки через DHTML и CSS, проверьте options.

+0

JQuery Валидация далека от чистой и приятной. У него все еще много ошибок, и он изменился с 18-ти месяцев, когда некоторые вещи даже не совместимы. Это отличный кусок кода для использования, но он не приятный и чистый. –

+0

В дополнение к тому, что я использовал, он был чрезвычайно надежным, и я все еще думаю, что декларативный способ написания своих правил валидации в любое время отменяет ручную проверку. Я еще не нашел ошибок, но не искал их. –

+0

Глядя на http://plugins.jquery.com/project/issues/statistics/validate Я вижу, что есть 30 активных отчетов об ошибках. Достаточно большое число, учитывая средний срок службы отчета (15 недель 5 дней). Тем не менее, я по-прежнему рекомендую JQuery Validation, пока ошибки не влияют на ваше решение. –

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