1

最近我一直在做一个新项目,我决定使用 jQuery validate 插件进行 JavaScript 表单验证。

不幸的是,我遇到了一个问题,似乎每次我在文本框中输入一个字符时,都会触发成功事件。

看看我的 html 表单:-

<table id="tible">
   <tr>
      <td>
         <center>
            <label for="nom">Nom:<em class="red">*</em></label>
         </center>
      </td>
      <td >
         <input type="text" name="nom" id="nom"  placeholder="nom ici" required data-rule-required="true" style="width:200px;" data-msg-required="Veuillez entrer votre Nom" data-msg-success="cool"/>
      </td>
      <td>
      </td>
   </tr>
   <tr>
      <td>
         <center>
            <label for="prenom">Prénom:<em class="red">*</em></label>
         </center>
      </td>
      <td  >
         <input type="text"  placeholder="pr&eacute;nom ici" name="prenom" required data-rule-required="true" data-msg-required="Veuillez entrer votre prénom(un seul suffit)" id="prenom" style="width:200px;"/>
      </td>
      <td></td>
   </tr>
   <tr>
      <td>
         <center>
            <label for="email">Email:<em class="red">*</em></label>
         </center>
      </td>
      <td >
         <input type="email" name="email" id="email" required data-rule-required="true" data-rule-email="true" placeholder="Email ici" data-msg-required="Veuillez entrez votre adresse Email " data-msg-email="Veuillez entrez une adresse Email valide" style="width:200px;"/>
      </td>
      <td class="td2">
      </td>
   </tr>
   <tr>
      <td>
         <center>
            <label for="adresse">Adresse:<em class="red">*</em></label>
         </center>
      </td>
      <td >
         <input type="text" data-msg-required="Veuillez renseigner une adresse valide" data-rule-required="true" placeholder="Adresse ici" name="adresse" id="adresse" style="width:200px;"/>
      </td>
      <td class="td2"></td>
   </tr>
   <tr>
      <td >
         <center>
            <label for="tel1">T&eacute;l&eacute;phone 1:<em class="red">*</em></label>
         </center>
      </td>
      <td>
         <input type="text"  data-msg-required="Veuillez entrer un numéro de téléphone (mobile/fixe)"  data-rule-required="true" name="tel1" id="tel1" placeholder="Numéro principal ici" style="width:200px;"/>
      </td>
      <td class="td2"></td>
   </tr>
   <tr>
      <td >
         <center>
            <label for="tel2">T&eacute;l&eacute;phone 2:</label>
         </center>
      </td>
      <td>    
         <input type="text" name="tel2" id="tel2" placeholder="Numéro secondaire ici" style="width:200px;"/>     
      </td>
      <td class="td2"></td>
   </tr>
   <tr>
      <td>
         <center>
            <label for="pays">Pays:<em class="red">*</em></label>
         </center>
      </td>
      <td>
         <select name="pays" id="pays"  size="1" id="pays"  style="width:200px;" data-rule-required="true" data-msg-required="Veuillez selectionner votre pays">
            <option  value="" selected>choisissez votre pays</option>
            <option  value="pays1"><?php echo 'Cote D\'ivoire'; ?></option>
         </select>
      </td>
      <td class="td2"></td>
   </tr>
   <tr>
      <td>
         <center>
            <label for="ville">Ville:<em class="red">*</em></label>
         </center>
      </td>
      <td>
         <select name="ville" id="ville"  size="1" id="ville"  style="width:200px;"  data-rule-required="true" data-msg-required="Veuillez selectionner votre ville">
            <option  value="" selected>choisissez votre ville</option>
         </select>
      </td>
      <td class="td2"></td>
   </tr>
</table>
<div class="acceptance">
   <!--<a href="#" onClick="document.getElementById('inscription').submit()"  class="cusbtn" >Ok</a>--><input type="button" class="cusbtn" value="Ok" id="subinscrip"/>&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" onClick="document.getElementById('inscription').reset()" class="cusbtn" value="Annuler" />
</div>
<center>
   <p><em>" les champs ci-dessus contenant ce symbole <span class="red">*</span> sont &agrave; remplir obligatoirement. "</em></p>
</center>
</fieldset>
</form>

这是处理验证的 jQuery 片段

$("#inscription").validate({
    errorPlacement: function (error, element) {
        error.appendTo(element.parent().next());
    },
    highlight: function (element, errorClass) {
        $(element).removeClass(errorClass);
    },
    success: function (label) {

        label.html("&nbsp;").removeClass('error');
        label.addClass('success');

    }

});

$('#subinscrip').click(function () {
    if ($("#inscription").valid()) {
        $("#inscription").submit();
    }

});

例如,当我在字段中输入一个字符时,"nom"它会自动显示有效图标,如果我继续输入字符,对于在第一个字符之后输入的每个字符,它将创建一个带有有效图标的新标签并将其显示在多行上,如图所示在下面的屏幕截图问题截图 中,我怎样才能阻止这种情况发生?谢谢

4

1 回答 1

1

这不是success导致您的问题的回调,而是errorPlacement回调函数。

errorPlacement: function (error, element) {
    error.appendTo(element.parent().next());
},

appendTo每次触发时,您都在告诉它。“追加”意味着它被“添加”到已经存在的内容中。 .insertAfter()应该更接近你需要的......

errorPlacement: function (error, element) {
    error.insertAfter(element.parent().next());
},

您正在highlight向后使用回调函数...

highlight: function (element, errorClass) {
    $(element).removeClass(errorClass);
},

highlight回调是突出“错误”的地方。但是,您的代码正在删除errorClass尽管只有在出现错误时才会触发此回调。

此外,通常在使用highlight回调时,会使用回调,unhighlight以便在错误来来去去时正确切换。

highlight: function (element, errorClass) {
    $(element).addClass(errorClass);
},
unhighlight: function (element, errorClass) {
    $(element).removeClass(errorClass);
},

然后,您错误地尝试使用success...切换两个类

success: function (label) {
    label.html("&nbsp;").removeClass('error');
    label.addClass('success');
}

success您想label在“有效”字段上显示消息时,您可以使用回调。通常,label当字段有效时,消息会被隐藏。相反,这些类应该使用highlightunhighlight回调函数进行切换,并且success应该只用于处理“有效”label内容。

highlight: function (element, errorClass, validClass) {
    $(element).addClass(errorClass).removeClass('success');
},
unhighlight: function (element, errorClass, validClass) {
    $(element).removeClass(errorClass).addClass('success');
},
success: function (label) {
    label.html("&nbsp;");
}

这两个回调还接受第三个参数validClass,通常是插件的默认“有效”类,称为valid. 由于您的被称为success,您可以success使用validClass选项将其更改为...

validClass: "success",
highlight: function (element, errorClass, validClass) {
    $(element).addClass(errorClass).removeClass(validClass);
},
unhighlight: function (element, errorClass, validClass) {
    $(element).removeClass(errorClass).addClass(validClass);
},

最后,如果您修复了所有这些问题,但仍想在每次击键时禁用验证,请使用此选项...

onkeyup: false

请记住永远不要将该选项设置为,true因为它会破坏默认功能。

请参阅文档:http: //jqueryvalidation.org/validate/

于 2013-11-07T23:04:33.983 回答