代码之家  ›  专栏  ›  技术社区  ›  John

为什么我的jQuery插件在焦点上删除文本并在模糊上重新添加文本不起作用?

  •  0
  • John  · 技术社区  · 16 年前

    this.each(function() {  
        obj = $(this);
        var initialText = obj.val();
    
        obj.focus(function () { 
            if(obj.val() === initialText)
                obj.val("");    
        });
    
    
        obj.blur(function () { 
            if(obj.val() ==="")
                obj.val(initialText);   
        });
    });  
    

    如果我有两个元素,那么它就不起作用了。为什么会这样?

    2 回复  |  直到 16 年前
        1
  •  2
  •   tvanfosson    16 年前

    var 关键字将变量范围限定为匿名函数,以便插件应用于的每件事都有一个对应的变量。

        2
  •  0
  •   bendewey    16 年前

    您需要将插件与代码实现分开编写。

    你的插件看起来像这样:

     (function($) {
        $.fn.watermark = function() {  
    
           return this.each(function() {         
              var obj = $(this);
              var initialText = obj.val();
    
              obj.focus(function () { 
                if(obj.val() === initialText)
                   obj.val(""); 
              });
    
             obj.blur(function () { 
                if(obj.val() ==="")
                    obj.val(initialText);   
             });
           });
        };
     })(jQuery);  
    

    $(document).ready(function() {
    
        $('.watermark').watermark();
    
    });
    

    此外,作为tvanfosson,您需要包括 var 关键字在你的 obj 如果你没有 变量 关键字在你的