Javascript 如何活着死去';关闭时,对话框中有什么?

Javascript 如何活着死去';关闭时,对话框中有什么?,javascript,html,dom,jquery,Javascript,Html,Dom,Jquery,我有一个对话框$('.dialog'),当我打开它时,用html填充它: $('.dialog').html(getForm()); 然后我有一个名为close()的函数;单击“关闭”时,我执行以下操作: $('.dialog').html(''); $('.dialog').hide(); 但是,如果我将动态元素(新DOM)与.live('event',function(){})一起放入表单中。。。 当我再次打开对话框时,我会附加两次实时操作,如果我关闭对话框并再次打开,我会附加三次实时操

我有一个对话框$('.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>
但是,我想在close()函数中对其进行推广,如下所示:

$('.dialog').find('*').die() // but this seems not to be working!
如果使用的是“.live()”,则不必重新附加事件处理程序。这就是重点。只需在开始时附加它们,无论您加载和卸载表单多少次,它们都将继续工作。

如果您使用的是“.live()”,则不必重新附加事件处理程序。这就是重点。只需在开始时附加它们,无论您加载和卸载表单多少次,它们都将继续工作

$('.dialog').delegate('.please_only_onetime', 'focusin', function () {
  //this is all you need to do... no rebinding, no "die"'ing ...
});
或者为了简单起见,您可以继续使用
live
。我认为你应该切换到
delegate()

或者为了简单起见,您可以继续使用
live
。我认为您应该切换到
delegate()

是的,“.delegate()”确实比“.live()”好。
.delegate()
”的+1。在大多数(如果不是全部)情况下,这比
.live()
好,这一事实必须让每个jQuery程序员铭记在心。是的,“.delegate()”确实比.live()好。
.delegate()
的+1。在大多数(如果不是全部)情况下,这比
.live()
更好,这一事实必须以强烈的信念向每个jQuery程序员灌输。
$('.dialog').delegate('.please_only_onetime', 'focusin', function () {
  //this is all you need to do... no rebinding, no "die"'ing ...
});