Jquery侦听器和条件。相反的结果?

Jquery侦听器和条件。相反的结果?,jquery,listener,conditional-statements,Jquery,Listener,Conditional Statements,我不确定这些听众是怎么了。假设从第一行框(如49)中选择,然后从第二行框(如52)中选择,并假设显示或隐藏div 相反,如果您选择第二行框(如52)中的一个,而不是选择第一行框(如49)中的任何一个,则它会起作用 我肯定错过了什么。我不知道是什么 这是你的电话号码 总结 这里发生的事情是,当您的侦听器启动时,您会多次运行namechecker,这将根据侦听器中namechecker调用的顺序显示或隐藏元素。你不想那样做 我将通过示例解释这是如何发生的,提供两种方法供您自己验证,最后提供一个有效的

我不确定这些听众是怎么了。假设从第一行框(如49)中选择,然后从第二行框(如52)中选择,并假设显示或隐藏div

相反,如果您选择第二行框(如52)中的一个,而不是选择第一行框(如49)中的任何一个,则它会起作用

我肯定错过了什么。我不知道是什么

这是你的电话号码

总结 这里发生的事情是,当您的侦听器启动时,您会多次运行namechecker,这将根据侦听器中namechecker调用的顺序显示或隐藏元素。你不想那样做

我将通过示例解释这是如何发生的,提供两种方法供您自己验证,最后提供一个有效的解决方案

实例 例如:假设您单击49复选框,调用此侦听器:

$('#in-name-49').click(function(){
    namechecker('in-name-49', 'in-name-52', 'name', [313,314, 315]);  //runs once for 52
    namechecker('in-name-49', 'in-name-311', 'name', [306,307, 308]); //runs once for 311
});    
然后运行两次namechecker,一次用于52,一次用于311,隐藏元素313、314和315,因为52未被选中,然后隐藏306、307和308,因为311未被选中。那很好,这是预期的结果

现在,如果单击52复选框,则将运行四次namechecker:

$('#in-name-52').click(function(){
    namechecker('in-name-49', 'in-name-52', 'name', [313,314, 315]);          //will show the elements
    namechecker('in-name-50', 'in-name-52', 'name', [316,317]);               //will hide the elements
    namechecker('in-name-279', 'in-name-52', 'name', [313,314, 315,316,317]); //will hide the elements
    namechecker('in-name-242', 'in-name-52', 'name', [313,314, 315,316,317]); //will hide the elements
});
由于选中了49框,当namechecker第一次运行时,它将显示元素313、314和315。但是namechecker会再次运行,因为50没有被选中,所以它会隐藏元素。在接下来的两次运行中也是如此,最后一次运行时隐藏了313314315,这是您在第一次调用中显示的元素

因此,您正在显示这些元素,但随后又在不经意间将它们再次隐藏起来

验证 方法1 您可以通过检查242然后检查52来验证这一点。由于namechecker最后一次在52的监听器中运行是为了242,所以它在52的监听器中最后要做的事情是显示元素[313314,315316317]

方法2 您还可以通过在52的侦听器中移动namechecker调用的顺序来验证这一点,以使项目在49-then-52序列之后显示:

解决方案 更好的方法是向所有侦听器注册一个函数,每次该函数运行时,它都会隐藏所有元素,然后一次检查所有namechecker函数,以显示应该可见的元素


JSFIDLE帮了大忙。我更新了我的答案,加入了一个有效的版本。瑞克,脱帽致敬。谢谢,这让事情变得更清楚了。我一直想知道添加hidable类是否会替换当前提供给div的类。虽然我的代码中没有包含这一点,但最初的代码是通过Wordpress生成的,并且已经有了自己的类。多谢各位。
$('#in-name-52').click(function(){
    namechecker('in-name-49', 'in-name-52', 'name', [313,314, 315]);          //will show the elements
    namechecker('in-name-50', 'in-name-52', 'name', [316,317]);               //will hide the elements
    namechecker('in-name-279', 'in-name-52', 'name', [313,314, 315,316,317]); //will hide the elements
    namechecker('in-name-242', 'in-name-52', 'name', [313,314, 315,316,317]); //will hide the elements
});
$('#in-name-52').click(function(){
    namechecker('in-name-50', 'in-name-52', 'name', [316,317]);
    namechecker('in-name-279', 'in-name-52', 'name', [313,314, 315,316,317]);
    namechecker('in-name-242', 'in-name-52', 'name', [313,314, 315,316,317]);
    namechecker('in-name-49', 'in-name-52', 'name', [313,314, 315]); //moved to the end
});