2010-04-28 75 views
17

我正在使用jquery验证插件来验证注册表单。jquery.validation - 如何在验证必填字段时忽略默认值

每个文本输入字段说明预填充为值在输入框中

例如:用于文本输入框ID =“名称”,默认值将被设置为“输入您的姓名”。我已经粘贴下面的示例代码:

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

我需要知道的是如何验证规则使得插件的输入框内包含的任何缺省消息或空值抛出必填字段错误指定。

非常感谢。

回答

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

我已经使用相同的对所有具有在形式默认值的元素。这很好。

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

我上面只是有以下改动工作好:

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

我认为你需要添加“默认”的情况下得到这个工作正常:

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

我觉得这是

+2

或者只是返回!(element.value == element.defaultvalue); – AntonioCS 2011-11-29 17:13:54

+0

对于这个主题的新来者,将上面的答案相应地替换为接受的答案,第4-12行。伟大的工作人员。 – deflime 2013-10-08 23:49:44

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

2

如果你想添加一个自定义的错误信息给它。

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

谢谢......正是我在找的东西! – brainondev 2012-05-25 14:51:21

0

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

  • 增加支持jquery.dropkick选择skining验证位置
  • 添加选择字段ve_invalid值项无效(要能没有它有效的选择,以显示指令)
  • 添加hideAllInstant以毫不拖延地删除验证
  • 添加对jquery的支持。simpleImageCheck元素,如果原来的输入被隐藏,使用simpleImageCheck的位置,而不是
  • 添加skipValidate类,以避免对某些领域的验证,而无需禁用它们
  • 修正错误,无匹配prompt_err不确定的,目的是产生错误
  • 添加克利尔支持以避免验证jquery.clearField.js
  • 添加validateHiddenFields,在隐藏和非隐藏场

验证你的情况,你可以使用修改为skipValidate类来执行此操作。 你可以在这里找到补丁脚本与英文过滤器沿(FR一个也可):

jquery.validationEngine.js Patched

jquery.validationEngine-en.js Patched

我应该提交这些变化为git的枢纽,但并没有时间现在就这样做。

杰罗姆戈德布特

豹牙

1

规则部分

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

后只需添加这一点,它会没事的。