2010-03-01 58 views
10
$('#lPass').focus(function() { 
     if (this.value == this.defaultValue) this.value = ''; 
     $(this).after('<input type="password" id="lPass" size="10" value="'+this.value+'"/>').remove(); 
}).blur(function() { 
    alert(1); 
}); 

<input id="lPass" type="text" size="10" value="Password"/> 


的onblur不工作。
任何想法?的jQuery的onblur不工作

回答

24

使用live,而不是重点和模糊

.live()已被弃用。 使用.on().off()代替。

,因为你要添加在运行时输入的,所以把它添加到页面出来的事件,住:

连接处理程序的事件匹配当前 所有 元素选择器,现在或将来。

例子:

$('#lPass').on('focus', function() { 
    if (this.value == this.defaultValue) this.value = ''; 
    $(this).after('<input type="password" id="lPass" size="10" value="' + this.value + '"/>').remove(); 
}); 


$('#lPass').on('blur', function() { 
    alert(1); 
}); 
+1

.live告诉jQuery的,你要做到这一点的东西无论是在原始文件或用JavaScript来做。在引号这第一部分功能之前,告诉它你要找什么样的事件为(重点在一审中,模糊在第二)。然后你定义你想要发生的事情。 – 2010-03-01 12:27:00

+6

.live被移除的jQuery 1.9+的,使用。对代替 – 2013-02-21 14:40:04

2

这就为您确切的代码:

$('#lPass').live('focus', function() { 
    if (this.value == this.defaultValue) this.value = ''; 
    $(this).after('<input type="password" id="lPass" size="10" value="'+this.value+'"/>').remove(); 
}).live('blur', function() { 
    alert(1); 
}); 
2

第一个问题,我看到的是,你的选择是#lPass的ID,但是,内选择器尝试插入具有相同ID的新标签。 ID在页面上必须是唯一的。那么你试图用.remove()去除 - 似乎对我没有意义。

只需使用一个.remove(),或使用新的ID ...

或澄清你想要做什么。

对于.blur,只是用一个模糊,但ID必须是固定的,或者使用.live()作为他人建议,如果你想模糊添加的新领域。