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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-05-16 15:07:57
Original
1424 Leute haben es durchsucht

Ü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:
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;
}
Nach dem Login kopieren

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>
Nach dem Login kopieren
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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

DEMO-Quellcode:

Herunterladen

Einige Fragen

1. Tatsächlich wurde dieses Problem entdeckt, als ich gestern Abend verwendete Nachricht. Heute habe ich jedoch festgestellt, dass das Problem nicht so einfach ist. Bei Verwendung von 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 gibt es kein solches Problem, alles funktioniert einwandfrei. Die Frage ist nun jedoch, warum das Hinzufügen von ein solches Problem verursacht. Darüber hinaus ist das Hinzufügen von

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());
},
Nach dem Login kopieren

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 anstelle von 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();
 }
Nach dem Login kopieren
Unter kann 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());
},
Nach dem Login kopieren

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

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

虽然解决问题,但是在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;
}
Nach dem Login kopieren

$(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
   }
  }
 });
 ....
});
Nach dem Login kopieren

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>
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage