2011-09-10 73 views
1

我有一个登录表单,其中包含显示文本'密码'的简单文本框。当用户单击该框时,即在焦点事件上时,我将文本框HTML替换为密码框HTML,具有相同的ID,与其他所有内容相同。jQuery将焦点方法绑定到动态输入元素

但是,在此更改之后,焦点事件不再适用于密码框,即使它具有相同的ID。我需要做额外的事吗?像绑定功能密码框。请告诉我如何做,并附上一些代码片段。谢谢。

这里是我的代码:

$(".login_fields input") 
    .focus(function (e) { 
     $(this).parent().html('<input type="password" value="" id="admin_password">'); 
     $(this).val(''); 
    }) 

回答

1

尝试使用过,而不是绑定,因为该元素后,已绑定添加,它连有没有事件处理程序:

$('#myTextBox').live('click', function() { 
    // Live handler called. 
}); 

这里有一个参考:

http://api.jquery.com/live/

这里有一个probab le解决方案为您:

$(".login_fields input").live("focus", function(){ 
     $(this).parent().html('<input type="password" value="" id="admin_password">'); 
     $(this).val(''); 
}); 
+0

我编辑我的职务,并加入我的代码,你可以给我具体到我的代码的解决方案?谢谢。 – rookieRailer

+0

非常感谢,很简单,但我一直在想。干杯! – rookieRailer

+1

请勿使用.live()http://jupiterjs.com/news/why-you-should-never-use-jquery-live use .delegate() – Aknosis

0

.live()是最简单的解决方案,但它也是最差的表现!当你使用.live()时,它意味着你添加了一个事件监听器来发生所有的点击,并检查这个点击是否在你的输入上。不建议。

您可以使用.delegate()只听输入文件的某个部分。委托是一样的活,将用于注射元素

$('.login_fields').live('.login_fields input', 'click', function() { 
    // your code 
}); 

DCS工作:http://api.jquery.com/delegate/

相关问题