jQuery Validate的占位符问题

时间:2011-05-20 01:17:33

标签: jquery jquery-validate

我今天注意到,当与占位符文本一起使用时,我们遇到了jquery Validate的问题。

示例:

<div class="sort left">
<label for="username" class="inlineelement">Username</label>
<input id="registername"  type="text" placeholder="your name" autocomplete="off" class="required"></input>

我注意到,如果我们使用jquery Validate(http://docs.jquery.com/Plugins/Validation/Methods

验证我们的表单

是否有解决方法,或者应该回到我们的表单字段中重点html(占位符文本)?

9 个答案:

答案 0 :(得分:16)

我遇到了同样的问题。经过一番乱搞后,找到了这种自定义方法的解决方法。此自定义方法将适用于占位符。

jQuery.validator.addMethod("placeholder", function(value, element) {
  return value!=$(element).attr("placeholder");
}, jQuery.validator.messages.required);

additional-methods.js文件的末尾标记此行。

然后您将按如下方式使用它:

$("form").validate({
  rules: {
    username: {required: true, placeholder: true},
  },
  message: {
    username: {
      required: "Username required", placeholder: "Username required",
    },
  }
});

答案 1 :(得分:5)

这是验证占位符的通用方法(在验证逻辑初始化后使用以下代码)。 它的工作原理是将自定义逻辑注入所有验证方法。

$(function () {
    $.each($.validator.methods, function (key, value) {
        $.validator.methods[key] = function () {
            var el = $(arguments[1]);
            if (el.is('[placeholder]') && arguments[0] == el.attr('placeholder'))
                arguments[0] = '';

            return value.apply(this, arguments);
        };
    });
});

答案 2 :(得分:3)

你也许可以围绕它编写脚本。

这将删除提交时的placeholder属性,并在发生错误时恢复它们。

var placeholders = {};
$('form').validate({
   submitHandler: function(form) {

       $(form).find(':input[placeholder]').each(function() {
          var placeholder = $(this).attr('placeholder'); 
          placeholders[placeholder] = this;
          $(this).removeAttr('placeholder');
       });       

       form.submit();
   },

   invalidHandler: function() {

      $.each(placeholders, function(placeholder, element) {
          $(element).attr('placeholder', placeholder);
      });

   }

});

答案 3 :(得分:3)

我遇到了与我正在处理的表单类似的问题。您可以使用the jq-watermark plug-in来制作占位符/水印。

它适用于jQuery Validate插件,即不妨碍验证。

答案 4 :(得分:2)

我的快速解决方案:

            $(".validateForm").submit(function(){
            $(this).find("input[type=text]").each(function(){
                if($(this).attr("placeholder") == $(this).val())$(this).val("");
            })
        })

答案 5 :(得分:1)

我发现如果您添加自定义规则,即:email:true,则不会忽略验证。 因此,如果您查看与jquery验证下载捆绑在一起的additional-methods.js,则会有一个名为alphanumeric的规则。这具有所有默认的必需功能。只需使用此自定义规则,它应该工作。我在旧浏览器上使用http://widgetulous.com/placeholderjs/来获取占位符。干杯

答案 6 :(得分:1)

$("form").validate();
    $(function () {
                $.each($.validator.methods, function (key, value) {
                $.validator.methods[key] = function () {
                var el = $(arguments[1]);
                if (el.is('[placeholder]') && arguments[0] == el.attr('placeholder'))
                    arguments[0] = '';
                    return value.apply(this, arguments);
                    };
                 });
      });

答案 7 :(得分:1)

http://jqueryvalidation.org/

尝试最新版本的jquery.validate

版本1.11.1似乎已经为我解决了这个问题= D

答案 8 :(得分:0)

我使用了一个技巧,如果你专注于该字段,则会出现占位符。以下代码将聚焦并模糊所有输入字段。

function tabFields(){
    $('#form input[type="text"]').each(function(){
        $(this).focus().blur();
    });
}