5

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

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

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

我错过了什么?

4

5 回答 5

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
            }
         },
于 2009-06-04T11:03:50.180 回答
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.");
于 2010-11-24T01:41:53.570 回答
3

看看这篇博文:

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

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

于 2009-06-04T10:54:41.790 回答
1

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

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

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

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

于 2010-09-29T10:13:11.177 回答
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 "";
   }
于 2013-05-09T22:09:00.527 回答