如何在关闭时对话中的所有LIVES?

时间:2011-09-29 13:55:44

标签: javascript html dom jquery

我有一个对话框$('。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!

2 个答案:

答案 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()