jQuery onblur无法正常工作

时间:2010-03-01 12:07:13

标签: jquery onblur

$('#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 无效。
有什么想法吗?

3 个答案:

答案 0 :(得分:26)

使用live代替焦点和模糊

  

.live()已被弃用。   请改用.on().off()

因为你是在运行时添加输入,所以它添加到没有事件的页面,live:

  

为所有人附加一个处理程序   与当前相匹配的元素   选择器,现在或将来。

示例:

$('#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 :(得分: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 :(得分:2)

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

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

或澄清你想做什么。

对于.blur,只需使用模糊,但必须修复ID,或者如果您希望模糊添加的新字段,请使用其他人建议的.live()。