【问题标题】:jquery.validation - how to ignore default values when validating mandatory fieldsjquery.validation - 验证必填字段时如何忽略默认值
【发布时间】:2011-02-13 14:30:10
【问题描述】:

我正在使用 jquery 验证插件来验证注册表。

每个文本输入字段都有预先填写为输入框中的值的说明

例如:对于文本输入框 id='Name',默认值将设置为“Enter Your Name”。我已经粘贴了下面的示例代码:

<input type="text" id="Name" value="Enter Your Name" onfocus="if(this.value == 'Your Name'){this.value = '';}" type="text" class="required" onblur="if(this.value == ''){this.value='Your Name';}" size="25" />

我需要知道的是如何在验证规则中指定,如果输入框包含默认消息或空值,插件会抛出必填字段错误。

非常感谢您的帮助。

【问题讨论】:

    标签: jquery-validate


    【解决方案1】:

    我认为这样更好:

    jQuery.validator.addMethod("defaultInvalid", function(value, element) 
    {
        return !(element.value == element.defaultValue);
    });
    

    【讨论】:

    • 或者直接返回 !(element.value == element.defaultvalue);
    • 对于该线程的新来者,将上述答案相应地替换为已接受的答案,第 4-12 行。伟大的工作家伙。
    【解决方案2】:

    我通过使用 validator.addMethod 创建自定义验证找到了解决问题的方法,这真的很简单。

    我在下面粘贴了我的验证块的 sn-p:

       //1. Define custom validation 
        $(document).ready(function() 
        {
        jQuery.validator.addMethod("defaultInvalid", function(value, element) 
        {
         switch (element.value) 
         {
          case "Your Name": -- this will be the default value in the Name text box
           if (element.name == "Your Name")
              return false;
         }
        }
        //2. Include custom validation in the rules for your element
        $("#aspnetForm").validate(
        {
          rules: 
          {
           Name: "required defaultInvalid"
          },
          messages: 
          {
           Name: "Please input your name"
          }
        })
       }
    

    我对表单中具有默认值的所有元素都使用了相同的方法。这很好用。

    【讨论】:

      【解决方案3】:

      对我而言,上述内容仅适用于以下更改:

      jQuery.validator.addMethod("defaultInvalid", function(value, element) 
      {
          switch (element.value) 
          {
              case "Your Name":
                  if (element.name == "element_name") return false;
                  break;
              default: return true; 
                  break;
          }
      });
      

      【讨论】:

        【解决方案4】:

        如果您想向其中添加自定义错误消息,请使用它。

        jQuery.validator.addMethod("defaultInvalid", function(value, element) {
            return !(element.value == element.defaultValue);
        }, 'Custom Error Message for this field');
        

        【讨论】:

        • 谢谢...正是我想要的!
        【解决方案5】:

        在规则部分之后添加这个

        onfocusout: function(element) { $(element).valid(); }

        一切都会好的。

        【讨论】:

          【解决方案6】:

          我认为您需要添加“默认”案例才能使其正常工作:

          jQuery.validator.addMethod("defaultInvalid", function(value, element) { 开关(元素。值){ 案例“$defaultText”: if (element.name == "$defaultText") 返回假; 休息; 默认: 返回真; 休息; } });

          【讨论】:

            【解决方案7】:
            $.validator.addMethod("defaultInvalid", function(value, element, param){
                    var r = $(element).rules();
                    var req=(this.objectLength(r))?r.required:false; // OR may be var req=r.required; // true, false or undefined.
                    return !req || (value!=param);
                },$.validator.messages.required);
            

            ...

            ,rules:{
                        message: {
                            defaultInvalid:$('#message').attr('placeholder')
                        }
                    }
            

            此类功能考虑了“必填”和“可选”字段的情况。

            表达式“!req”故意替换“this.optional(element)”,因为在某些情况下我收到错误消息“依赖不匹配”。

            【讨论】:

              【解决方案8】:

              我对 jquery.validationEngine 做了一些补丁,以允许忽略某些复杂表单的某些输入字段。我做了以下更改:

              • 添加对 jquery.dropkick 选择蒙皮验证位置的支持
              • 为 ve_invalid 值条目添加无效的选择字段(以便能够在没有有效选择的情况下显示指令)
              • 添加 hideAllInstant 以立即删除验证
              • 如果原始输入被隐藏,则添加对 jquery.simpleImageCheck 元素的支持,改为使用 simpleImageCheck 的位置
              • 添加 skipValidate 类以避免在不禁用​​某些字段的情况下验证它们
              • 修复与 prompt_err 未定义匹配时的错误,目标正在生成错误
              • 添加 clearField 支持以避免验证 jquery.clearField.js
              • 添加 validateHiddenFields,对隐藏和非隐藏字段进行验证

              在您的情况下,您可以使用对 skipValidate 类的修改来执行此操作。 您可以在此处找到已修补的脚本以及英文过滤器(也可以使用英文过滤器):

              jquery.validationEngine.js Patched

              jquery.validationEngine-en.js Patched

              我应该将这些更改提交到 git hub,但现在没有时间这样做。

              杰罗姆·戈布特

              Panthera 牙科

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多