我有一个对话框$('。dialog'),然后在我打开它时用表格的html填充:
$('.dialog').html(getForm());
然后我有一个名为close()的函数;当我点击关闭时,我会这样做:
$('.dialog').html('');
$('.dialog').hide();
但是,如果在形式中我放置动态元素(新DOM),与.live('event',function(){})... 当我再次打开对话框时,我会连接两次实时动作,如果我关闭对话框并再次打开,我会连接三次实时动作,等等。(请理解我需要使用.live()而不是.bind ())
表格:
<form id="formid">
<input type="text" class="please_only_onetime"/>
<script type="text/javascript">
$(document).ready( function() {
$('.please_only_onetime').live('focusin', function(){ alert( 'one time' );});
});
</script>
</form>
最后,如果我在.live()之前添加以下内容,则代码运行良好:
$('.please_only_onetime').die();
但是,我想要的是在close()函数中概括它,如:
$('.dialog').find('*').die() // but this seems not to be working!
答案 0 :(得分:2)
如果您使用“.live()”,则无需重新附加事件处理程序。这就是重点。只需在开始时附上它们,无论您装载和卸载表单多少次,它们都会继续工作。
答案 1 :(得分:2)
$('.dialog').delegate('.please_only_onetime', 'focusin', function () {
//this is all you need to do... no rebinding, no "die"'ing ...
});
为简单起见,您可以继续使用live
。我认为你应该切换到delegate()
。