【问题标题】:how jquery validator can custom divs for both error and successjquery 验证器如何为错误和成功自定义 div
【发布时间】:2015-01-19 10:19:15
【问题描述】:

我一直在寻找一天的时间,试图弄清楚如何让实时错误消息显示在不同的 div 中。

我为每个输入字段和每个错误使用自定义图标和 div,以及每个输入字段的成功图标。但是,当单击其他输入字段时,我一直在尝试的代码会发生奇怪的变化。

这里是 JS:

$(function validate() {
var  invalidFirstName = $("#blankField"),
    validFirstName = $('#validCheck');
  var  rules = {
    rules: {
       user_first_name: {
            required: true
        }

    errorPlacement: function (error,element) {
        if (element.attr("name") == "user_first_name"){
            (invalidFirstName).removeClass('hidden');
            (validFirstName).addClass('hidden');

        }
    },

    success: function() {
      //  if (element.attr("name") == "user_first_name"){
            (invalidFirstName).addClass('hidden');
            (validFirstName).removeClass('hidden');
       // }
    }
};

$('#briefStepOne').validate(rules);

});

如您所见,我也尝试过执行 if 语句,但它根本不起作用!任何帮助都会很棒。

这是我的 html 的布局:

 <div class="form-fields input-text">
        <div class="input-interaction-container">
            <label for="user_first_name" class="user_first_name">First Name&#42;</label>


            <input type="text" name="user_first_name" id="user_first_name" maxlength="50" class="user_first_name">
        </div>


        <div class="form-error-section pure-hidden-phone hidden" id = "blankField">
            <i class="fa fa-minus-circle"></i>
            <p>Field cannot be left blank</p>
        </div>
        <div class=" hidden form-error-section valid-icon pure-hidden-phone" id="validCheck">
            <i class="fa fa-check-circle"></i>
        </div>
    </div>

    <div class="form-fields input-text">
        <div class="input-interaction-container">
            <label for="user_last_name">Last Name&#42;</label>
            <input type="text" name="user_last_name" id="user_last_name" maxlength="50">
        </div>
        <div class=" hidden form-error-section pure-hidden-phone">
            <i class="fa fa-minus-circle"></i>
            <p>Field cannot be left blank</p>
        </div>
        <div class=" hidden form-error-section valid-icon pure-hidden-phone">
            <i class="fa fa-check-circle"></i>
        </div>
    </div>

更新的 JS 文件:

$(document).ready(function() {
    $('#briefStepOne'.validate({

        rules: {

            user_first_name: {
                required: true
            },
            user_last_name:{
                required:true
            },
            user_email_address:{
                required:true
            }
        },

        errorPlacement: function(error,element) {

            if (element.attr('name') == 'user_first_name'){

                $('#blankField').removeClass('hidden');
                $('#validCheck').addClass('hidden');
            } else if (element.attr('name') == 'user_last_name'){

                $('#last-name-empty').removeClass('hidden');
                $('#last-name-good').addClass('hidden');

            }

        },

        success: function(label) {

            if (label.attr('id') == 'user_first_name-error'){

                $('#blankField').addClass('hidden');
                $('#validCheck').removeClass('hidden');

            } else if (label.attr('id') == 'user_last_name-error'){
                $('#last-name-empty').addClass('hidden');
                $('#last-name-good').removeClass('hidden');

            }
        }


    }));
    });

【问题讨论】:

  • 你有一个函数叫做validate(),插件的方法叫做.validate()$('#briefStepOne').validate(rules) 是包含在同名函数中的方法。那怎么办?它永远不会被调用。
  • 也在看这个小提琴jsfiddle.net/zMYVq 它似乎对第一个字段的反应不如对第二个字段的反应。错误信息不显示
  • This jsFiddle 工作正常,所有/两条消息都出现了。解释更多。
  • 这里有语法错误:$('#briefStepOne'.validate({ 和这里:})); 请注意缺少和多余的括号。

标签: javascript jquery jquery-validate


【解决方案1】:

我一直在寻找一天的时间,试图弄清楚我怎么能得到 显示实时错误消息,每个都在不同的 div 中。

这就是您拥有 jQuery Validate 插件的原因。它会自动执行此操作。换句话说,当插件尝试创建和切换自己的元素时,您尝试切换硬编码的 div 元素。

有不少语法错误...

  1. rules 后缺少右大括号和逗号...

    ....
    rules: {
        user_first_name: {
            required: true
        }
    }, // <- this is missing
    errorPlacement: ....
    
  2. 如果您声明invalidFirstName = $("#blankField"),那么您就不需要将invalidFirstName 放在括号内...

    (invalidFirstName).removeClass('hidden');
    

    应该是……

    invalidFirstName.removeClass('hidden');
    

    根据下面的#4,无论如何,这是一个有争议的问题。

  3. 我看不到您如何调用包含您的 .validate() 方法的 $(function validate() {...。但是,这不是如何使用这个插件。 .validate() 方法应该只被调用一次以初始化表单上的插件,因为任何后续调用总是被忽略。换句话说,.validate() 位于 DOM 就绪事件处理函数内部,而不是任何其他函数或事件处理函数内部。初始化后,验证会由自动捕获的某些事件自动触发。

  4. 然后您将利用the plugin's multitude of options 将动态错误消息插入div。然后插件自动切换这些错误消息的可见性。您永远不需要在 HTML 中对任何错误消息容器进行硬编码或编写一个切换 hidden 类的函数。

  5. 不确定您是否只是将它们排除在 OP 之外,或者您是否真的从未使用过它们,但是,您的输入元素必须位于 &lt;form&gt;&lt;/form&gt; 容器内。否则此插件将无法正常工作。


【讨论】:

  • 感谢您的详细解答!第 1 点和第 2 点如您所见,我已经修复并更新了我的代码。出于澄清目的,何时/如何调用插件 - 我认为它是使用 $('#briefStepOne').validate(rules);同样,当发生错误时,我希望出现一个图标以及我的个性化文本。如何编辑插件 div 以使其包含图标并按照我想要的方式设置样式?我有一个严格的设计需要遵循。
  • @ElinaLulle,即使.validate() 方法 与您的validate() 函数 相同(它不是),怎么可能当 $('#briefStepOne').validate(rules) 包含在您的自定义 validate() 函数内部时,它会起作用吗?
猜你喜欢
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
相关资源
最近更新 更多