Heim >Web-Frontend >js-Tutorial >Zusammenfassung der Übermittlungsmethoden für Validierungs- und Formular-Plug-ins in jquery_javascript-Kenntnissen

Zusammenfassung der Übermittlungsmethoden für Validierungs- und Formular-Plug-ins in jquery_javascript-Kenntnissen

WBOY
WBOYOriginal
2016-05-16 15:07:571410Durchsuche

Übersicht: In diesem Artikel wird hauptsächlich jquery.validate in Kombination mit jquery.form zur Implementierung von Formularüberprüfungs- und Übermittlungslösungen erläutert.

Methode 1: Über die SubmitHandler-Option von jquery.validate wird die Rückruffunktion ausgeführt, wenn das Formular die Überprüfung besteht. Senden Sie das Formular über jquery.form in dieser Rückruffunktion

Methode 2: Verwenden Sie beforeSubmit von jquery.form, eine Rückruffunktion, die vor dem Absenden des Formulars ausgeführt wird. Wenn diese Funktion „true“ zurückgibt, wird das Formular gesendet. Wenn sie „false“ zurückgibt, wird die Formularübermittlung beendet. Gemäß der Methode valid() des Plug-Ins jquery.validate kann das Formular beim Senden des Formulars über jquery.form überprüft werden.

Methode 3: Validieren Sie das Formular über jquery.validate. Der Vorteil dieser Methode besteht darin, dass Sie mehr Kontrolle über die Formularvalidierung haben

Beispiele: Die oben genannten drei Methoden werden im Folgenden anhand von drei Beispielen erläutert

CSS-Stildatei laden

Code kopieren Der Code lautet wie folgt:
53f8aada758235eb8931a66ee5ae99ba
Dateiinhalt im CSS-Stil

input{
 height:25px;
 line-height:25px;
 padding-left:4px;
}

span.checked{
 padding: 0px 5px 0px 25px;
 margin-left: 10px;
 margin-top: 0px;
 margin-bottom: 3px;
 height: 25px;
 line-height:25px;
 font-size: 12px;
 white-space: nowrap;
 text-align: left;
 color: #E6594E;
 background: url("images/acion2.png") no-repeat 3px; /* #FCEAE8 */
}
span.unchecked{
 padding: 0px 5px 0px 25px;
 margin-left: 10px;
 margin-top: 0px;
 margin-bottom: 3px;
 height: 23px;
 line-height:23px;
 font-size: 12px;
 border: 1px solid #E6594E;
 white-space: nowrap;
 text-align: left;
 color: #E6594E;
 background: #FCEAE8 url("images/acion.png") no-repeat 3px;
}

Javascript-Datei laden

<script language="JavaScript" type="text/JavaScript" src="js/jQuery1.6.2.js"></script>
<script language="JavaScript" type="text/JavaScript" src="js/jquery.form.js"></script>
<script language="JavaScript" type="text/JavaScript" src="js/jquery.validate.js"></script>
<script language="JavaScript" type="text/JavaScript" src="js/localization/messages_tw.js"></script>
HTML-Inhalt

<body><span id="result"></span>
<form id='commentForm'>
 <fieldset>
 <legend>jquery.validate+jquery.form提交的三种方式</legend>
  <p>
   <label for='cusername'>姓名</label><em>*</em>
   <input id='cusername' name='username' size='25' />
  </p>
  <p>
   <label for='cemail'>电子邮件</label><em>*</em>
   <input id='cemail' name='email' size='25' />
  </p>
  <p>
   <input class='submit' type='submit' value='提交'>
  </p>
 </fieldset>
</form>
</body>

jquery.validate+jquery.form übermittelt den Javascript-Inhalt von Methode 1

<script language="javascript">
function showResponse(responseText,statusText) {
 if(statusText=='success'){
  $("#result").html(responseText);
 }
}

$(document).ready(function(){
 $('#commentForm').validate({
  focusCleanup:true,focusInvalid:false,
  errorClass: "unchecked",
  validClass: "checked",
  errorElement: "span",
  submitHandler:function(form){
   $(form).ajaxSubmit({
    type:"post",
    url:"test_save.php&#63;time="+ (new Date()).getTime(),
    //beforeSubmit: showRequest,
    success: showResponse
   });
  },
  errorPlacement:function(error,element){
   var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");
   if(s!=null){
    s.remove();
   }
   error.appendTo(element.parent());
  },
  success: function(label) {
   //label.addClass("valid").text("Ok!")
   label.removeClass("unchecked").addClass("checked");
  },
  rules:{
   username:{required:true,minlength:3},
   email:{
    required:true
   }
  }
 });
});
</script>

jquery.validate+jquery.form übermittelt den Javascript-Inhalt von Methode 2

<script language="javascript">
function showResponse(responseText,statusText) {
 if(statusText=='success'){
  $("#result").html(responseText);
 }
}

function showRequest(formData,jqForm,options){
 return $("#commentForm").valid();
}

$(document).ready(function(){
 $('#commentForm').submit(function(){
  $(this).ajaxSubmit({
   type:"post",
   url:"test_save.php&#63;time="+ (new Date()).getTime(),
   beforeSubmit:showRequest,
   success:showResponse
  });
  return false; //此处必须返回false,阻止常规的form提交
 });

 $('#commentForm').validate({
  focusCleanup:true,focusInvalid:false,
  errorClass: "unchecked",
  validClass: "checked",
  errorElement: "span",
  errorPlacement:function(error,element){
   var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");
   if(s!=null){
    s.remove();
   }
   error.appendTo(element.parent());
  },
  success: function(label) {
   //label.addClass("valid").text("Ok!")
   label.removeClass("unchecked").addClass("checked");
  },
  rules:{
   username:{required:true,minlength:3},
   email:{
    required:true
   }
  }
 });
});
</script>

jquery.validate+jquery.form übermittelt den Javascript-Inhalt von Methode 3

<script language="javascript">
 var options={
  focusCleanup:true,focusInvalid:false,
  errorClass: "unchecked",
  validClass: "checked",
  errorElement: "span",
  errorPlacement:function(error,element){
   var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");
   if(s!=null){
    s.remove();
   }
   error.appendTo(element.parent());
  },
  success: function(label) {
   //label.addClass("valid").text("Ok!")
   label.removeClass("unchecked").addClass("checked");
  },
  rules:{
   username:{required:true,minlength:3},
   email:{
    required:true
   }
  }
 };

function showResponse(responseText,statusText) {
 if(statusText=='success'){
  $("#result").html(responseText);
 }
}

function showRequest(formData,jqForm,options){
 return $("#commentForm").valid();
}

$(document).ready(function(){
 validator=$('#commentForm').validate(options);
 $("#reset").click(function(){
  validator.resetForm();
 });

 $("button").click(function(){
  validator.form();
 });

 $('#commentForm').submit(function(){
  $(this).ajaxSubmit({
   type:"post",
   url:"test_save.php&#63;time="+ (new Date()).getTime(),
   beforeSubmit:showRequest,
   success:showResponse
  });
  return false; //此处必须返回false,阻止常规的form提交
 });
});
</script>

DEMO-Quellcode:

Herunterladen

Einige Fragen

1. Tatsächlich wurde dieses Problem entdeckt, als ich gestern Abend 8b05045a5be5764f313ed5b9168a17e6 verwendete Nachricht. Heute habe ich jedoch festgestellt, dass das Problem nicht so einfach ist. Bei Verwendung von 8b05045a5be5764f313ed5b9168a17e6 muss das Eingabefeld „Name“ nur drei Zeichen lang sein, um die Überprüfung als bestanden zu betrachten – nach Eingabe des ersten Zeichens. Bei den zweiten Zeichen ist die Fehleranzeige normal. Wenn das dritte Zeichen eingegeben wird, verschwindet die Fehleranzeige und es wird ein „Komma“-Bild angezeigt, das anzeigt, dass die Überprüfung bestanden wurde. Bisher scheint alles gut zu funktionieren, aber wenn Sie weiterhin Zeichen eingeben, etwa das vierte Zeichen, das fünfte Zeichen ... tritt das Problem auf. Wie unten gezeigt:

Bei Verwendung von 8b05045a5be5764f313ed5b9168a17e6 gibt es kein solches Problem, alles funktioniert einwandfrei. Die Frage ist nun jedoch, warum das Hinzufügen von 8b05045a5be5764f313ed5b9168a17e6 ein solches Problem verursacht. Darüber hinaus ist das Hinzufügen von 8b05045a5be5764f313ed5b9168a17e6

Die Lösung dieses Problems ist ziemlich kompliziert. Hier ist eine Liste des Prozesses. Und geben Sie am Ende eine Lösung

Zuallererst liegt es daran, dass ich gestern die Fehlermeldung überprüft und auf den Code geachtet habe, der die Fehlermeldung eingefügt hat. Ich habe zu errorPlacement einen Satz hinzugefügt: alarm(element.parent().html());

errorPlacement:function(error,element){
 alert(element.parent().html());
 var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");
 if(s!=null){
  s.remove();
 }
 error.appendTo(element.parent());
},

Wenn Sie das erste Zeichen eingeben, erhalten Sie etwa das Bild unten

Geben Sie drei Zeichen ein. Nach erfolgreicher Verifizierung erhalten Sie folgendes Bild:

Geben Sie weitere Zeichen ein und erhalten Sie das unten gezeigte Ergebnis

Dies veranschaulicht die folgenden Probleme:

1. Unabhängig davon, ob die Überprüfung fehlschlägt oder erfolgreich ist, wird errorPlacement:function(...)

aufgerufen

2. s.remove() funktioniert nicht.

Da ich beim Schreiben dieses Artikels 100db36a723c770d327fc0aef2ce13b1 anstelle von 8b05045a5be5764f313ed5b9168a17e6 verwendet habe, lautet der Popup-Inhalt htmlFor="cusername" anstelle von for="cusername", wie in der folgenden Abbildung gezeigt:

Daher ist der obige Code wie folgt geschrieben

 var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");
 if(s!=null){
  s.remove();
 }
Unter 8b05045a5be5764f313ed5b9168a17e6 kann cdbbb27a406e2197a6a2e80430e77f8454bdf357c58b8a65c66d7c19c8e4d114 jedoch nicht basierend auf htmlFor gefunden werden, daher sollte htmlFor hier in for geändert werden ist,

errorPlacement:function(error,element){
 alert(element.parent().html());
 var s=element.parent().find("span[for='" + element.attr("id") + "']");
 if(s!=null){
  s.remove();
 }
 error.appendTo(element.parent());
},

问题似乎解决了。但上面提到,不管验证成功或失败,都会调用errorPlacement:function(...),那可以在这里判断有没有错误,如果有错误,则显示。防止已经验证成功的情况下仍会调用。这样就不会寻找span的for属性值是否为当前控件的name名称了(例子中是for="cusername")。改进的代码如下:

errorPlacement:function(error,element){
 if(error.html()!=''){
  error.appendTo(element.parent());
 }
},

虽然解决问题,但是在chrome、firefox下仍有问题。了解这个问题的现象,可以用firefox或chrome测试一下——焦点离开输入框后,无法验证,只有点击“提交”按钮后才可以验证——这个问题的解决方案目前还没有深入下去。但是有解决的办法是,将上面的jquery1.6.2换成jquery1.3.2或jquery1.4(其它的jquery版本未测试,可能是低于jquery1.6.2的版本都可以)即可解决这个问题。

建议:

1、使用jquery1.3.2版本,这样可以节省很多时间来解决兼容方面的问题。

更多:

本例子中的jquery.validate,解决了remote远程验证只返回true or false的局限。可以返回代码及出错的提示信息,更好的人性化需求。使用方法就在这介绍一下

增加以下函数

function GetRemoteInfo(postUrl,data){
 var remote = {
  type: "POST",
  async: false,
  url: postUrl,
  dataType: "xml",
  data: data,
  dataFilter: function(dataXML) {
   var result = new Object();
   result.Result = jQuery(dataXML).find("Result").text();
   result.Msg = jQuery(dataXML).find("Msg").text();
   //alert(result.Result);
   if (result.Result == "-1") {
    result.Result = false;
    return result;
   }else{
    result.Result = result.Result == "1" &#63; true : false;
    return result;
   }
  }
 };
 return remote;
}

$(document).ready(function(){
 var dataInfo ={email:function(){return $("#cemail").val();}};
 var remoteInfo = GetRemoteInfo('check-email.php&#63;time='+(new Date()).getTime(),dataInfo);
 $('#commentForm').validate({
  rules:{
   username:{
    required:true,
    minlength:3
   },
   email:{
    required:true,
    remote:remoteInfo
   }
  }
 });
 ....
});

check-email.php返回的内容为xml格式,格式如下

<&#63;php
header("Content-Type:text/xml");
echo '<&#63;'.'xml version="1.0" encoding="utf-8"'.' &#63;>';
&#63;>
<AjaxClass>
<Msg>用户名格式不正确,用户名必须包含testa,请重新输入!</Msg>
<Result>0</Result>
</AjaxClass>

result值为0,返回的是false,表示验证失败;result值为1,返回的是true,表示验证成功

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn