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

时间:2010-10-24 16:07:55

标签: radio-button jquery

我遇到的问题是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的形式,因为它总是以tab1的形式结束
  2. 通过使用$(“input.sample_radio”)我假设所有类型'sample_radio'都可以工作,但它也不起作用。
  3. live应该在jquery调用之后将事件绑定到添加到DOM树的新元素,但似乎对我来说不是这样。
  4. 由于


    遵循Mark Schultheiss的建议

      

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

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

    $('#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;
                                });
    

    感谢您指出我这一点。

1 个答案:

答案 0 :(得分:2)

通过使用.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