需要一些帮助,我确信这是相当容易的jquery
我有以下重复标记(几个列表项)
<li>
<div class="answer">
<p><select class="dropdown">
..options..
</select></p>
</div>
<div class="commentBox">
..content..
</div>
</li>
根据所加载页面时所选选项的值,将显示/隐藏“commentBox”。
我尝试过以下jquery
var dd = $('.dropdown');
var com = $('.commentBox');
dd.each(dd, function(n, val){
if($(this).val() == 'whatever'){
com[n].setStyle('display', 'none');
}
});
我收到错误“b.apply不是函数”
所以在我的脑海中,它应该如何工作 - 如果它是第一个选择下拉列表,则显示/隐藏第一个“commentBox”div。如果是第二个下拉列表,则显示/隐藏第二个“commentBox”div。等等。
我认为我在尝试各种jquery技术时遇到了麻烦,所以我相信这里有很多种可能性。 感谢
答案 0 :(得分:1)
您的问题是您将额外(第一个)参数传递给each
each
仅在静态调用时将集合作为第一个参数
换句话说:
$.each(dd, function() { ... });
或
dd.each(function() { ... });
请注意,您可以通过将代码更改为
来使代码更清晰$(this).closest('li').find('.commentBox').hide();
答案 1 :(得分:0)
当calling .each()
like that时,您只给它一个参数function
。
dd.each(function(n, val){
if($(this).val() == 'whatever'){
com[n].setStyle('display', 'none');
}
});
,您可以传递2个参数
$.each(dd, function(n, val){
if($(this).val() == 'whatever'){
com[n].setStyle('display', 'none');
}
});
第二个版本用于迭代任何类型的集合。
你把两者结合起来。
编辑:我想我最好先解释一下setStyle
是OP的代码,并不是眼前问题的直接原因。
我无法知道OP是否使用其他方法扩展了DOM元素。因此,我只能假设这种方法的放置是正确的。
答案 2 :(得分:0)
尝试
var dd = $('.dropdown'),
com = $('.commentBox');
dd.each(function(n, ele) {
if( $(ele).val() == 'one') {
com.eq(n).css('display', 'none');
}
});
使用.eq(n)
而不是[n]
后者会产生DOM节点,而我会生成一个jQuery对象,您可以在其上调用css()
(如您所见,我从{{1}切换无论如何,setStyle
)的功能是什么。
使用Slakks建议的增强功能,您最终会得到更好的可读代码
css()