2012-04-08 93 views
1

我想验证一个窗体使用Ajax和onchange函数。基本上我想在焦点从输入框中消失后进行自动验证。然后,如果它是空白/无效条目,它会声明一个错误。onchange不会打印出空的输入错误

出于某种原因,验证适用于无效条目,但不适用于第一次尝试时的空输入(意思是如果我刷新页面并按标签前往第二个字段框,则没有错误)。有趣的是我删除一个条目后空错误正常工作。我试过使用$ 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事件,并且如果该字段为空,则该函数将不会触发,因为没有任何更改。 – 2012-04-08 02:47:08

+2

尝试使用onblur。 – 2012-04-08 02:50:08

回答

0

你说你要自动验证一旦焦点从输入框不见了。在这种情况下触发的事件是onblur,而不是onchange