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)
.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()就没有多大意义呢:)