jquery.validation - 验证必填字段时如何忽略默认值

时间:2010-04-28 23:56:50

标签: jquery-validate

我正在使用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" />

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

非常感谢。

8 个答案:

答案 0 :(得分:19)

我认为这更好:

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

答案 1 :(得分:5)

我通过使用validator.addMethod创建自定义验证来解决问题,这非常简单。

我在下面粘贴了我的验证块的片段:

   //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"
      }
    })
   }

我对表格中具有默认值的所有元素使用了相同的内容。这非常有效。

答案 2 :(得分:2)

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

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;
    }
});

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

只需在规则部分后添加

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

一切都会好的。

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

$.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)”,因为在某些情况下我收到错误消息“依赖性不匹配”。

答案 7 :(得分:0)

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

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

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

jquery.validationEngine.js Patched

jquery.validationEngine-en.js Patched

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

Jerome Godbout

Panthera Dental