jQuery Watermarked输入和验证

时间:2009-06-04 10:51:44

标签: jquery validation watermark

在HTML页面上,我有一个输入框,当它为空时,上面有一个'水印'。 (例如:“在这里输入文字......”)。有点像这样:http://digitalbush.com/projects/watermark-input-plugin/ - 但是自定义写的。

问题在于我无法弄清楚如何使用jQuery验证插件(http://docs.jquery.com/Plugins/Validation/)来验证此字段,以便它将我的水印文本视为字段为空。

我在jQuery验证器中找不到一个选项让我为字段有效时指定一个自定义规则,有吗?我可以找到允许我指定是否需要根据自定义逻辑验证 字段的选项,而不是如何验证它。

我错过了什么?

5 个答案:

答案 0 :(得分:6)

感谢Kazar为我提供了链接,我想出了以下解决方案(如果有人有兴趣的话):

    function notWatermark(value, element){
        return value != 'enter text...';
    }

    $.validator.addMethod("notWatermark", notWatermark, "Field cannot be empty.");

    $('#SearchForm').validate({
        rules: {
            SomeField: {
                required: true,
                notWatermark: true
            }
         },

答案 1 :(得分:5)

我正在使用jQuery的Watermark插件,但我的情况类似:

http://code.google.com/p/jquery-watermark/

它使用类名来显示水印。 (我不确定DigitalBrush版本是否使用了类。)我修改了上面的函数,使用jQuery的hasClass()函数来确定该字段是否根据当前分配的类被评估为“空”。

function notWatermark(value, element){
 return !$(element).hasClass("waterMarkClass");
}
$.validator.addMethod("notWatermark", notWatermark, "Required.");

答案 2 :(得分:3)

查看此博文:

http://randomactsofcoding.blogspot.com/2008/10/starting-with-jquery-how-to-write.html

告诉您如何为字段构建自定义验证规则。

答案 3 :(得分:1)

为每个测试盒使用唯一的水印标签时(例如“输入名字”,“输入姓氏”......),您可以将脚本改进为:

function noWatermark(value, element) {
        return value.toLowerCase() != element.defaultValue.toLowerCase();
    }

$.validator.addMethod("noWatermark", noWatermark, "required.");

这也会从脚本中删除硬编码文本。

答案 4 :(得分:0)

不确定验证插件的工作原理,但这是一个可用的独立模块。

   var SetWatermark = function( oElemToWatermark, sWatermark )
   {
      var CheckFocus = function(oEvent)
      {
         var oElem = $(this);

         if ( oElem.val() == oElem.data("Watermark") )
            oElem.val("").css("color", "");
      }

      var CheckBlur = function(oEvent)
      {
         var oElem = $(this);

         if ( oElem.val().length == 0 )
            oElem.val( oElem.data("Watermark") ).css("color", "Grey");
      }

      // HTML5 (simple route)
      if ( oElemToWatermark[0].placeholder != undefined )
         oElemToWatermark[0].placeholder = sWatermark;

      // pre HTML5 (manual route)
      else if (oElemToWatermark.data("Watermark") == undefined)
         oElemToWatermark  .data("Watermark", sWatermark)
                           .val(sWatermark)
                           .on("focus", CheckFocus )
                           .on("blur",  CheckBlur  );
   }

   var GetWatermarkText = function(oElem)
   {
      if (oElem[0].plaeholder != undefined)
         return oElem[0].placeholder;
      else if ( oElem.data("Watermark") != undefined )
         return oElem.data("Watermark");
      else
      { 
         alert("The element " + oElem[0].id + " does not have a Watermark value.");
         return "";
      }
   }

   var GetWatermarkValue = function(oElem)
   {
      var sVal       = oElem.val();
      var sWatermark = oElem.data("Watermark");

      if (oElem[0].placeholder   != undefined 
      ||  sWatermark             == undefined 
      ||  sWatermark             != sVal)
         return sVal;
      else if (sVal == sWatermark)
         return "";
   }