0

Ich habe eine Funktion gemacht, die Eingaben mit für verschiedene Arten von Zeichenfolgen validiert. Ich habe ernsthafte Probleme mit ein paar Dingen. Ich rufe es auf Formular Senden und für jeden Eingang auf ändern. Ich habe meinen Code unten und dann den Aufruf der Funktion geschrieben. Die Sache ist: Wenn ich es bei Änderung anrufe und die Seite aktualisiere, führt es automatisch die Validierungen bei Änderung durch, wenn die Seite geladen wird, und rendert die Fehler.jQuery Autoruns Funktionen auf Änderungsereignisse wenn Seite geladen wird

var Val = { 
    'string': function(ident, req, regexp, offset, limit) { 
     var ele = $(document.getElementById(ident)); 
     Val.errors = false; 

     if (!ele.val() && req == 1) { 
      alert('blank'); 
      Val.errors = true; 
      $("#" + ident + "Error").html("This field cannot be empty."); 
      $("#" + ident + "Error").show("fast"); 
     }else if ((ele.val().length <= offset || ele.val().length > limit) && Val.errors == false) { 
      alert('not long enough'); 
      Val.errors = true; 
      $("#" + ident + "Error").html("This field must be between " + offset + " & " + limit + " charecters long"); 
      $("#" + ident + "Error").show("fast"); 
     }else if (regexp !== null) { 
     switch (regexp) { 
      case 'text': 
       var regEx = /^([a-zA-Z]+)$/g; 
       break; 
      case 'number': 
       var regEx = /^([0-9]+)$/g; 
       break; 
      case 'email': 
       var regEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/g; 
       break; 
      case 'date': 
       var regEx = /^([123]0|[012][1-9]|31)-(0[1-9]|1[012])-(19[0-9]{2}|2[0-9]{3})$/g; 
       break; 
      case 'alphanum': 
       var regEx = /^([a-zA-Z0-9_\-\.]+)$/g; 
       break; 
      default: 
       break; 
     } 
      if (!regEx.test(ele.val()) && Val.errors == false) { 
       alert('not valid'); 
       Val.errors = true; 
       $("#" + ident + "Error").html("This field is not valid"); 
       $("#" + ident + "Error").show("fast"); 
      } 
     } 
     if (!Val.errors){ 
      $("#" + ident + "Error").hide("fast"); 
     } 
    }, 

    'send': function() { 
     if (!Val.errors) { 
      $('#form').submit(); 
     } 
    } 
} 

Aufruf der Funktion:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Form Validations</title> 
<script type="text/javascript" language="JavaScript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script type="text/javascript" language="JavaScript" src="js/gcui.lsat.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $('#send').click(function(){ 
     checkEmail(); 
     checkUsername(); 
     Val.send(); 
    }); 

    $('#emailID').change(checkEmail()); 
    $('#username').change(checkUsername()); 


    function checkEmail(){ 
     Val.string('email', 1, 'username', 10, 100); 
    } 
    function checkUsername(){ 
     Val.string('username', 1, 'alphanum', 5, 15); 
    } 
}); 
</script> 
</head> 
<body> 
    <form id="form" action=""> 
     <input type="text" id="email" name="email" title="Email" /> 
     <input type="text" id="username" name="username" title="Username" /> 
     <input type="button" id="send" value="Submit" /> 
    </form> 

    Email: <div id="emailError"></div><br/> 
    Username: <div id="usernameError"></div> 
</body> 
</html> 

Antwort

4
$('#emailID').change(checkEmail()); 

Means "Run checkEmail und übergeben Sie den Rückgabewert auf den change Methode"

Sie wollen:

$('#emailID').change(checkEmail); 

Bedeutung "Pa ss die checkEmail Funktion zum change Methode“

+0

die Klammern nach einem Funktionsnamen werden die Funktion aufrufen. Hier müssen Sie die Funktion nur als Parameter an die Änderungsmethode übergeben. edit: sorry ich wollte einen Kommentar zu der ursprünglichen Frage schreiben – naiquevin

0

In Ihrem $ ('# send'). klicken (function() { Sie es zweimal tun muss. Das erste Mal, wenn Sie die Validierung durchführen, und das zweite Mal, wenn der Knopf gedrückt wird. Fügen Sie die Zeile hinzu Rückgabe Falsch; direkt nach dem Val.send(); und Sie erhalten nur das Forum zu übermitteln, wenn dort Formular ausgefüllt

Verwandte Themen