2011-10-24 21 views
0

JavaScriptを使用したフォームの検証に関する書籍のセクションで作業しています。残念ながら、本の例は機能しません。私は、検証の背後にあるロジックを理解し、それに従っています(個々のフィールド検証関数のどれかが検証関数に値を返し、警告が表示され、フォームはonSubmitに送信されません)。しかし何も起こっていません。私はスクリプトとhtmlを数回見て、間違ったものは見つけられません(私は本のサイトに行ってそこからコードをコピーしました)。ここでJavaScriptフォームの検証が機能していませんサブタイトル

は、HTMLフォームとJavaScript検証です:

<script> 
    function validate(form) 
    { 
      fail = validateForename(form.forename.value) 
      fail += validateSurname(form.surname.value) 
      fail += validateUsername(form.username.value) 
      fail += validatePassword(form.password.value) 
      fail += validateAge(form.age.value) 
      fail += validateEmail(form.email.value) 
      if (fail == "") return true 
      else {alert(fail); return false } 
    } 
    </script> 

    <script> 
    function validateForename(field) { 
      if (field == "") return "No Forename was entered.\n" 
      return "" 
    } 

    function validateSurname(field) { 
      if (field == "") return "No Surname was entered.\n" 
      return "" 
    } 

    function validateUsername(field) { 
      if (field == "") return "No Username was entered.\n" 
      else if (field.length < 5) return "Usernames must be at least 5 characters.\n" 
      else if (/[^a-zA-Z0-9_-]/.test(field)) return "Only a-z, A-Z, 0-9, - and _ allowed in Usernames.\n" 
      return "" 
    } 

    function validatePassword(field) { 
      if (field == "") return "No Password was entered.\n" 
      else if (field.length < 6) return "Passwords must be at least 6 characters.\n" 
      else if (! /[a-z]/.test(field) || ! /[A-Z]/.test(field) || ! /[0-9]/.test(field)) return "Passwords require one each of a-z, A-Z and 0-9.\n" 
      return "" 
    } 

    function validateAge(field) { 
      if (isNAN(field)) return "No Age was entered.\n" 
      else if (field < 18 || field > 110) return "Age must be between 18 and 110.\n" 
      return "" 
    } 

    function validateEmail(field) { 
      if (field == "") return "No Email was entered.\n" 
        else if (!((field.indexOf(".") > 0) && (field.indexOf("@") > 0)) || /[^[email protected]_-]/.test(field)) return "The Email address is invalid.\n" 
      return "" 
    } 
    </script> 

</head> 

<body> 

    <table class="signup" border="0" cellpadding="2" cellspacing="5" bgcolor="#eeeeee"> 
    <th colspan="2" align="center">Signup Form</th> 
    <form method="post" action="adduser.php" onSubmit="return validate(this)"> 
    <tr><td>Forename</td><td><input type="text" maxlength="32" name="forename" /></td> 
    </tr><tr><td>Surname</td><td><input type="text" maxlength="32" name="surname" /></td> 
    </tr><tr><td>Username</td><td><input type="text" maxlength="16" name="username" /></td> 
    </tr><tr><td>Password</td><td><input type="text" maxlength="12" name="password" /></td> 
    </tr><tr><td>Age</td><td><input type="text" maxlength="3" name="age" /></td> 
    </tr><tr><td>Email</td><td><input type="text" maxlength="64" name="email" /></td> 
    </tr><tr><td colspan="2" align="center"> 
    <input type="submit" value="Signup" /></td> 
    </tr></form></table> 
</body> 
</html> 

答えて

1

isNaNisNANを交換し、それが動作するはずです。

4

何もあなたが本当にが起こっていない、そしてそれは、問題を作ることによって解決できるものです「フォームが送信され、」含まれていることをされていることを意味していますと仮定したonSubmit

が起きていませんHTML valid

表の行およびのフォームは、それらの行が属している表の中に置くことはできません。一部のブラウザは、このエラーからフォームを表の後に移動します(ただし、表の中の入力は残しています)。これは、入力がフォーム内になく、何もしないで座っていることを意味します。

クイックフィックスとして、フォームをテーブルを囲むように移動します。

適切な解決策として、レイアウトのためにテーブルを使用しないでください。 CSSはform layoutのための良いツールです。

また、the label elementを利用し、JSにグローバルを入力しないでください。

+0

これはすべて有効ですが、手元にあるバグに関連しています。 – Mathew

+0

+1は無効なHTMLですが、唯一の問題ではありませんでした。 –

+0

@Matthew - 私の答えの最初の2つの段落は、**なぜ**関連しているのかを説明します。 – Quentin

2

ここにヒントがあります。どのように "isNAN"と綴っていますか?

このコードは、各コード行の後に警告文を入れて簡単にデバッグできます。このような単純なデバッグを使用すると、無効な構文があることがわかります。私はあなたにバグを見つけるためにそれを残す!

+0

すべてのステートメントの後に警告を表示するよりも、コンソールを開いてデバッグするのは簡単ですが、とにかく+1します。警告を促すためにできるのであれば、私は+0.5をします:p –

+0

ありがとうございました。私は実際に投稿する前にデバッグコンソールでこれを見ていたはずです。私はどのようにNaNの問題を逃したかわからない。いずれにしても、誰もが入力に感謝します。 – user732027

関連する問題