2012-04-08 12 views
1

私はAjaxとonchange関数を使用してフォームを検証しようとしています。基本的には、入力ボックスからフォーカスがなくなると自動検証が必要です。それが空白/無効なエントリの場合、それはエラーを述べます。onchangeは空の入力に対してエラーを出力しません

何らかの理由で、無効なエントリに対して検証が行われますが、最初の試行で空の入力には機能しません(つまり、ページを更新して2番目のフィールドボックスに移動するとエラーは発生しません)。面白いのは、エントリを消去した後、空のエラーが正常に機能することです。私は$ var = ""または空($ var)を使ってみましたが、私はまだ同じ結果を得ています。

は、ここでPHPの一部だ:

if(isset($_GET["isbn"])) 
{ 
    $isbn = $_GET["isbn"]; 

    $error=""; 

    if(empty($isbn) || !preg_match("/^\d{12}$/", $isbn)) 
    { 
     $error .= "Please enter a valid ISBN"; 
     echo $error; 
    } 
    else 
     echo $error; 

} 

ここに残ります:

<script type="text/javascript">       
    function validateIsbn(keyword) 
    { 
     var xhr = new XMLHttpRequest(); 

     xhr.onreadystatechange = function() { 

      if(xhr.status == 200 && xhr.readyState == 4) 
      { 
       var res = xhr.responseText; 
       document.getElementById("err1").innerHTML = res; 
      } 
     } 

     xhr.open("get","validate_isbn.php?isbn=" + keyword,true); 
     xhr.send(); 
    } 

    </script> 

<form method="get" action=""> 


      <label class="top-label">ISBN:</label> 
      <input name="isbn" id="isbn" type="text" onchange="validateIsbn(this.value)"/> 
      <div id="err1"> </div> 
      <p></p><p></p> 
+1

onchangeイベントを使用しているため、フィールドが空白の場合は機能しません。変更されていないため、この関数はトリガーしません。 –

+2

代わりにonblurを試してください。 –

答えて

0

あなたはフォーカスが入力ボックスから消えた後は、自動検証をしたいと言います。その場合にトリガーされるイベントはonblurであり、onchangeではありません。

関連する問題