11
$('#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不工作。
有任何想法吗?

4

3 回答 3

32

使用实时而不是焦点和模糊

.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);
});
于 2010-03-01T12:13:28.320 回答
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);
});
于 2010-03-01T12:20:45.063 回答
2

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

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

或者澄清你想做什么。

至于 .blur,只需使用模糊,但 ID 必须固定,或者如果您希望模糊添加的 NEW 字段,请按照其他人的建议使用 .live()。

于 2010-03-01T12:21:16.333 回答