2012-03-18 23 views
3

我用的jQuery plugin: Validation下面的代碼:jQuery插件:Validation-標籤越來越隱蔽

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 

<style type="text/css"> 
div.formerror 
{ 
    color: red; 
    margin-bottom: 6px; 
    margin-top: 1px; 
} 
input.error, select.error, label.error 
{ 
    border: 2px solid red; 
    background-color: #FFFFD5; 
    margin: 0px; 
    color: red; 
} 
</style> 


<!-- <script src="http://code.jquery.com/jquery-latest.js"></script> --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 

<script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script> 
<script type="text/javascript"> 

$(document).ready(function(){ 
     $('#edit_form').validate({ 
      rules: { 
       chooseMe: "required" 
      }, 
      messages: { 
       chooseMe: "" 
      }, 

      messages: { 
       name: "Name is missing", 
       email: { 
        required: "E-mail address is missing", 
        email: "Your email address is not valid" 
       } 
      }, 


      highlight: function(element, errorClass, validClass) { 
       $(element).addClass(errorClass).removeClass(validClass); 
       $(element.form).find('[name='+element.name+']').each(function (i, sameName){ 
        $(element.form).find("label[for=" + sameName.id + "]").addClass(errorClass); 
       }); 
      }, 
      unhighlight: function(element, errorClass, validClass) { 
       $(element).removeClass(errorClass).addClass(validClass); 
       $(element.form).find('[name='+element.name+']').each(function (i, sameName){ 
        $(element.form).find("label[for=" + sameName.id + "]").removeClass(errorClass); 
       }); 
      }, 
      submitHandler: function(form) { 
       $("#edit_form div.formerror").hide(); 
       alert("validated successfully - submit handler here"); 
      }, 
      invalidHandler: function(e, validator) { 
       var errors = validator.numberOfInvalids(); 
       if (errors) { 
        var message = 'There are missing or invalid fields. They have been highlighted below.'; 
        $("#edit_form div.formerror span").html(message); 
        $("#edit_form div.formerror").show(); 
       } else { 
        $("#edit_form div.formerror").hide(); 
       } 
      } 
     }); 
    }); 

</script> 

</head> 

<body> 
<form class="cmxform" id="edit_form" method="get" action=""> 
    <div class="formerror" style="display: none"> 
     <span></span> 
    </div> 
    <fieldset> 
    <legend>A simple comment form with submit validation and default messages</legend> 
    <p> 
    <label for="cname">Name</label> 
    <em>*</em><input id="cname" name="name" size="25" class="required" minlength="2" /> 
    </p> 
    <p> 
    <label for="cemail">E-Mail</label> 
    <em>*</em><input id="cemail" name="email" size="25" class="required email" /> 
    </p> 
    <p> 
    <label for="curl">URL</label> 
    <em> </em><input id="curl" name="url" size="25" class="phone" value="" /> 
    </p> 
    <p> 
    <label for="ccomment">Your comment</label> 
    <em>*</em><textarea id="ccomment" name="comment" cols="22" class="required"></textarea> 
    </p> 
    <p> 
    <input class="submit" type="submit" value="Submit"/> 
    </p> 
    </fieldset> 
</form> 
</body> 

</html> 

它運作良好,但有兩個問題:

    當我提出
  1. 拉貝斯越來越隱蔽出現錯誤,更正錯誤並重新提交表單。這種情況是被糾正的文件失去標籤(插件放置:無CSS屬性)。它接縫這個pugin混合了原來的標籤和錯誤實驗室,並在沒有錯誤時隱藏它們。如何解決這個問題?
  2. 爲什麼對於tesxtarea字段,當我糾正錯誤時,它會立即將類更改爲成功(這意味着已更正),而對於輸入文件,我應該重新提交表單以便插件開始驗證?

回答

1

下面的代碼解決了這個問題。關於項目2請參考此鏈接: jQuery plugin: Validation - validation on key up does not work

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 

<style type="text/css"> 
div.formerror 
{ 
    color: red; 
    margin-bottom: 6px; 
    margin-top: 1px; 
} 
.error 
{ 
    border: 1px dashed red; 
    background-color: #FFFFD5; 
    margin: 0px; 
    color: red; 
} 
label.errorForLabel 
{ 
    margin: 0px; 
    color: red; 
} 
label.error{ 
    visibility:hidden; 
    width:0; 
    height:0; 
} 
</style> 


<!-- <script src="http://code.jquery.com/jquery-latest.js"></script> --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 

<script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script> 
<script type="text/javascript"> 
var errorClassForLabel = 'errorForLabel'; 
$(document).ready(function(){ 
     $('#edit_form').validate({ 

      errorClass: "error", 

      validClass: "valid", 

      rules: { 
       name: "required", 
       email: { 
        required: true, 
        email: true 
       }, 
       url:{ 
        required: true, 
        url:true 
       }, 
       comment: "required" 
      }, 

/*   onkeyup: true,*/ 

      highlight: function(element, errorClass, validClass) { 
       $(element).addClass(errorClass).removeClass(validClass); 
       $(element.form).find('[name='+element.name+']').each(function (i, sameName){ 
        $(element.form).find("label[for=" + sameName.id + "]").addClass(errorClassForLabel); 
       }); 
      }, 

      unhighlight: function(element, errorClass, validClass) { 
       $(element).removeClass(errorClass).addClass(validClass); 
       $(element.form).find('[name='+element.name+']').each(function (i, sameName){ 
        $(element.form).find("label[for=" + sameName.id + "]").removeClass(errorClassForLabel); 
       }); 
      }, 

      submitHandler: function(form) { 
       $("#edit_form div.formerror").hide(); 
       alert("validated successfully - submit handler here"); 
      }, 

      invalidHandler: function(e, validator) { 
       var errors = validator.numberOfInvalids(); 
       if (errors) { 
        var message = 'There are missing or invalid fields. They have been highlighted below.'; 
        $("#edit_form div.formerror span").html(message); 
        $("#edit_form div.formerror").show(); 
       } else { 
        $("#edit_form div.formerror").hide(); 
       } 
      } 
     }); 
    }); 

</script> 

</head> 

<body> 
<form class="cmxform" id="edit_form" method="get" action=""> 
    <div class="formerror" style="display: none"> 
     <span></span> 
    </div> 
    <fieldset> 
    <legend>A simple comment form with submit validation and default messages</legend> 
    <p> 
    <label for="name">Name</label> 
    <em>*</em><input type="text" id="name" name="name" size="25" minlength="2" /> 
    </p> 
    <p> 
    <label for="email">E-Mail</label> 
    <em>*</em><input type="text" id="email" name="email" value="" maxlength="150" size="25"/> 
    </p> 
    <p> 
    <label for="url">URL</label> 
    <em> </em><input type="text" id="url" name="url" size="25" value="" /> 
    </p> 
    <p> 
    <label for="comment">Your comment</label> 
    <em>*</em><textarea id="comment" name="comment" cols="22"></textarea> 
    </p> 
    <p> 
    <input class="submit" type="submit" value="Submit"/> 
    </p> 
    </fieldset> 
</form> 
</body> 

</html>