jQuery focusin和focusout直播活动没有解雇

Cor*_*old 6 jquery

jQuery版本:1.4.1

我正在尝试编写一个简单的水印类型插件,我想利用实时事件,因为我不需要在页面加载期间存在我需要使用它的所有元素,或者可以在DOM中添加和删除它们.然而,由于某种原因,事件永远不会发生.

这是不工作的代码:

; (function($) {

    $.fn.watermark = function(text) {

        return $(this).each(function() {
            $(this).live('focusout', function() {
                if (this.value == "") {
                    this.value = text;
                }

                return false;
            });

            $(this).live('focusin', function() {
                if (this.value == text) {
                    this.value = "";
                }

                return false;
            });
        });
    }

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我可以在不使用直播活动的情况下使用它.这段代码确实有效:

; (function($) {

    $.fn.watermark = function(text) {

        return $(this).each(function() {
            $(this).focusout(function() {
                if (this.value == "") {
                    this.value = text;
                }

                return false;
            });

            $(this).focusin(function() {
                if (this.value == text) {
                    this.value = "";
                }

                return false;
            });
        });
    }

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 6

.live() 需要一个选择器而不是一个DOM元素,在你调用它的地方,它只在一个DOM元素上,所以代替这个:

$(this).each(function() {
        $(this).live('focusout', function() {
Run Code Online (Sandbox Code Playgroud)

试试这个(this已经是一个jQuery对象):

this.live('focusout', function() {
Run Code Online (Sandbox Code Playgroud)

它需要这个,因为它是如何.live()工作的,当一个事件冒泡到document它检查那个选择器......如果没有选择器,它就没有办法检查.另外,如果你有一个DOM元素和事件处理程序是只有它,.live()就没有多大意义呢:)