Jquery live似乎不适用于嵌套调用

我遇到的问题是jquery live function不能一直为我工作(或者我认为)。

我有相同的html表单,用于添加新注释和编辑现有注释; 这个表单通过GET调用在服务器端使用php代码传播。 这两个表单显示在两个不同的选项卡中(tab1:添加注释,tab2:列出注释; tab3:编辑在tab2中选择的注释),基于选项卡选择。 “添加评论”表单显示为tab1的主要内容; 但是,“编辑”表单基于需要在tab2中编辑的注释的选择而出现,因此假设“编辑注释”表单显示为tab3。 当表单是该选项卡的主要内容时,下面的代码适用于tab1; 但是当它是tab3的主要内容时它不能始终如一地工作,它基于需要在tab2中编辑的注释来显示。

$("input.sample_radio").live('change',function(){ if ($(this).val() == 'no') $('#sample_table').hide(); else if ($(this).val() == 'yes') $('#sample_table').show(); return false; }); 

如果你能提供一些想法,我们将不胜感激。 我的观察是:

  1. 我使用了$(“input [name =’sample_radio’]”)但这不适用于tab3的forms,因为它总是以tab1的forms结束
  2. 通过使用$(“input.sample_radio”)我假设所有类型’sample_radio’都可以工作,但它也不起作用。
  3. live应该在jquery调用之后将事件绑定到添加到DOM树的新元素,但似乎对我来说并非如此。

谢谢


遵循Mark Schultheiss的建议

查看.delegate(),它是专门为解决此问题而提供的,允许您指定上下文。

我设法通过将事件绑定到单选按钮的选定父项(tab1和tab3)然后基于选择器进行过滤来解决此问题,这里是单选按钮元素的名称,如下所示:

 $('#tab1,#tab3').delegate('input[name="policy_radio"]','change',function(){ if ($(this).val() == 'no') $('.policy_table').hide(); else if ($(this).val() == 'yes') $('.policy_table').show(); return false; }); 

谢谢你指着我这一点。

通过使用.live,你遇到了其中一个挑战。 更改选择上下文时,会阻止其正常工作。

查看.delegate(),它是专门为解决此问题而提供的,允许您指定上下文。

有关Brandon Aaron代表的一些注意事项,请参阅此帖: http : //brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery

在上下文中看到这个很好的一个: http : //brandonaaron.net/blog/2009/06/24/understanding-the-context-in-jquery