2012-04-08 5 views
1

Ich versuche, ein Formular mit Ajax und Onchange-Funktion zu validieren. Grundsätzlich möchte ich automatische Validierung, sobald der Fokus aus dem Eingabefeld entfernt ist. Dann wird ein Fehler angezeigt, wenn es leer/ungültig ist.onchange wird Fehler für leere Eingabe nicht ausgegeben

Aus irgendeinem Grund funktioniert die Validierung für ungültige Einträge, aber funktioniert nicht für leere Eingaben beim ersten Versuch (was bedeutet, wenn ich Seite aktualisieren und zum zweiten Feld durch Tab gehen, gibt es keinen Fehler). Die lustige Sache ist der leere Fehler funktioniert gut, nachdem ich einen Eintrag gelöscht habe. Ich habe versucht, mit $ var = "" oder leer ($ var), aber ich bekomme immer noch die gleichen Ergebnisse.

Hier ist der PHP-Teil:

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; 

} 

Hier ist der Rest:

<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

Es funktioniert nicht, da Sie das Ereignis onchange verwenden und wenn das Feld leer ist, wird die Funktion nicht ausgelöst, da sich nichts geändert hat. –

+2

Versuchen Sie stattdessen onblur. –

Antwort

0

Sie sagen, Sie automatische Validierung wollen, sobald der Fokus aus dem Eingabefeld verschwunden ist. Das in diesem Fall ausgelöste Ereignis ist onblur, nicht onchange.

Verwandte Themen