我遇到的问题是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;
});
如果你能提供一些想法,我们将不胜感激。我的观察是:
由于
遵循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;
});
感谢您指出我这一点。
答案 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