2011-08-15 11 views
1

登録フォームを検証したいが、すべてのテキスト入力に対してデフォルト値がある。 jquery validate pluginを使用してすべての可能な方法を試してみました。それを使用する方法を理解するのは難しい(私はjsに初心者です)私がやりたいことは、デフォルト値を無視してフォームを検証することです。私のフォームは、私は、このフォームのコードのこの部分を使用していることフォーム検証

<from id="reg"> 
<input class="part1 default" type="text" name="fname" id="fname" value="Adınız (First Name)"/> 
<input class="part1 default" type="text" name="mname" value="Atanızın adı (Middle name)"/> 
</form> 

var defaultValues = { 
    'fname': 'Adınız', 
    'mname': 'Atanızın adı', 
    'lname': 'Soyadınız', 
    'phone': 'Telefon', 
    'email': 'Email', 
    'pwd':'Şifrə', 
    'region':'Rayon', 
    'school':'Məktəb', 
    'login':'Istifadəçi adı', 
    'class':'Sinif', 
    'subject':'Fənnin adını daxil edin', 
    'dob': 'Date of Birth' 
}; 
$('input').live('focus', function() { 
    var el = $(this); 
    if (el.hasClass('default')) { 
     el.removeClass('default').val(''); 
    } 
    if (el.attr('id') === 'dob') { 
     $(this).mask('99.99.9999', {placeholder:' '}); 
    } 
}); 

$('input').live('blur', function() { 
    var el = $(this); 
    var name = el.attr('name'); 

    // Really we only want to do anything if the field is *empty* 
    if (el.val().match(/^[\s\.]*$/)) { 

     // To get our default style back, we'll re-add the classname 
     el.addClass('default'); 

     // Unmask the 'dob' field 
     if (name == 'dob') { 
      el.unmask(); 
     } 

     // And finally repopulate the field with its default value 
     el.val(defaultValues[name]); 
    } 
}); 

/*validation*/ 
$('#reg').submit(function (event) 
    { 
     if ($('#fname').val() == defaultValues['Adınız'] || $.trim($('#pwd').val()) == '') 
     { 
      alert('Please enter the name!'); 
      return false; 
     } 
     else 
     { 
      if ($('#fname').val().length < 2) 
      { 
       alert('The name must be >2 letters!'); 
       return false; 
      } 
     } 
    }); 

のように見えるあなたが見るように最後の部分は、検証です。私はそれについてのfeqの質問を持っています

  1. 可能性のあるすべてのケースについては、私たちは書いています。何があっても 私たちはプロセスを提出し続けたいですか? の場合は新しく書く必要がありますか?「trueを返しますか?
  2. 私はこのコードを使用しましたが、いつも同じエラーが表示されます メッセージ "パスワードを入力してください!"すべての入力フィールドが であっても配列のエラーを警告するためにこのコードを変更するにはどうすればよいですか? たとえば、パスが間違っていて、名前フィールドが満たされていないと、スクリプトは で一度に2つのエラーを表示します。私は論理についても考えました。例えば、すべての場合 時には、あるケースが真の場合、エラー メッセージを配列にプッシュし、すべてのケースのチェックが終了すると、エラー 配列を示します。しかし、それを実現することはできません。 電子メールフィールドと生年月日フィールド(「19.16.2010」のように見える)の検証方法を教えてください。
+0

なぜフォームを検証するときに値を無視したいですか?フィールドが持つ価値のあるものでフォームを検証できないのはなぜですか?なぜフィールドがデフォルト値を持っているかどうかをチェックする必要がありますか? – Kishore

+0

問題をより一般的なケースに還元して、それを記述するのに必要な最小限のコードを作成してください。 – hakre

+0

笑))私のフォームのコードが見えましたか? –

答えて

2

デフォルト値を「値」属性に配置する代わりに、「プレースホルダ」として設定してください。私たちは、プロセスを提出し続けたい場合はどうオールライトと

<input type="text" name="fname" id="fname" placeholder="Adınız (First Name)"/> 

次に、あなただけの定期的な検証を行うことができます...

+0

しかし、すべてのブラウザでサポートされているわけではありません。 –

+0

@Tural Teyyuboglu:Javascriptはすべてのブラウザでサポートされているわけではありません。そのため、入力フィールドのサーバー側の検証を常に行う必要があります。 – hakre

+0

プレースホルダーはHTML 5要素で、すべてのブラウザーでサポートされていません –

1

?私はそれを新しいものを書く必要がありますか?

はい。 return true;

このコードを使用しましたが、「パスワードを入力してください!」というエラーメッセージが表示されます。すべての入力フィールドが満たされていても配列のエラーを警告するためにこのコードを変更するにはどうすればよいですか?たとえば、パスが間違っていて、名前フィールドが満たされていないと、スクリプトは一度に2つのエラーを表示します。

すべてのエラーを最初に収集し、すべてのエラーメッセージを表示する必要があります。配列のような複合データ構造を使用します。

私もロジックについて考えた:たとえば、すべての時間は、いくつかのケースが真であるとき、それは、配列にエラーメッセージをプッシュし、それはすべてのケースをチェックし終えたときに、エラーアレイを示します。しかし、それを実現することはできません。電子メールフィールドと生年月日フィールド(「19.16.2010」のように見える)の検証方法

データの種類ごとに検証ルーチンを用意する必要があります。あなたは、そのデータ型が含まれている各フィールドごとに応じて機能を呼び出すことができます。

form element -> data-type -> validation function 

たぶん、あなただけの手間を惜しまするためにjqueryの検証プラグインを使用する必要がありますか?私はあなたがこの問題の最初の人ではないと思うので、おそらく掘り下げる価値があります。