jquery - jQuery 插件可能存在范围问题?

标签 jquery plugins jquery-plugins scope

我正在尝试制作一个 jquery 插件(只是为了好玩),但我似乎无法在某些部分做我想做的事情。

(function($){

    var resetText = function(){ if (this.value == "") this.value = this.title; }
    var clearText = function(){ if (this.value == this.title) this.value = ""; }

    $.fn.placeHolder = function() {
        return this.each(function(){
            resetText(); // <-- this doesn't work
            $(this).focus(clearText).blur(resetText);
        });
    };
})(jQuery);

基本上,我希望将 title 属性复制到 doc.ready 和 field.blur 上的 value 属性(如果该值为空)

现在,它可以在Blur上运行,但不能在document.ready上运行

我感觉这是一个范围问题,但老实说我不知道​​如何解决它。

亲自看看:http://jsfiddle.net/Usk8h/

最佳答案

您遇到的是问题,而不是范围问题。

这样做:

resetText.call( this );

.call() 方法允许您将 resetText() 函数中 this 的值设置为您作为第一个参数。

在本例中,您将在 .each() 中传递由 this 表示的 DOM 元素。


编辑:

您实际上可以将插件减少到这样:

$.fn.placeHolder = function() {
    return this.focus(clearText).blur(resetText).blur(); // <-- triggers blur
};

关于jquery - jQuery 插件可能存在范围问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036028/

相关文章:

javascript - SumoSelect 处理事件不适用于 Android 设备

javascript - 创建具有动态参数的 Jquery 插件以供多次使用

jquery - 如何检查是否加载了 jQuery 插件?

jquery - 我如何创建像 Lowes.com 那样的导航系统

javascript - 使用 FOR 循环绑定(bind)一系列事件

javascript - 有什么方法可以使 JQuery 插件可扩展?

javascript - 在 jQuery 中引用变量中的选项

jquery-plugins - 如何在jsTree中进行json ajax调用

javascript - 获取 html5 Canvas 上每个绘制矩形的特定颜色

jQuery:保留 .index() 返回每个父索引