我有这段代码:http://jsfiddle.net/spadez/928Dj/39/
$("ul.opt").addClass("hidden");
$('#filter > li > a').on("click", function (e) {
var cache = $(this).next('ul');
$('#filter ul:visible').not(cache).hide();
cache.toggle();
});
控制台中没有错误。在我的html中,我将form
移到了ul
之外,从我看到的javascript仍然有效但是当我点击链接时不再触发下拉列表。代码中的错误在哪里?
答案 0 :(得分:2)
问题是next()
不是ul
。
next()
将获得下一个兄弟,因为next()
不是ul
它(next("ul")
)将不包含元素。
由于您想要获得的ul
是下一个兄弟的孩子,请尝试以下方法:
$("ul.opt").addClass("hidden");
$('#filter > li > a').on("click", function (e) {
var cache = $(this).next('form').find("ul");
$('#filter ul:visible').not(cache).hide();
cache.toggle();
});
备注:强>
似乎不会发生这种情况......但如果您可能在a
和form
之间有其他兄弟姐妹,则可以.nextAll('form')
这样做看看a
之后的所有兄弟姐妹。
如果您可能在ul
下有多个form
级别,则可能需要执行.children('ul')
而不是.find('ul')
,这样它只能看在直接的孩子。
<强>替代强>
这可能就是我要做的,我对所有(js,html和css)进行了一些小改动:
$('.dropdown').on("click", function (e) {
var cache = $(this).siblings('.opt');
$('.opt:visible').not(cache).hide();
cache.toggle();
});
答案 1 :(得分:2)
答案 2 :(得分:0)
替代方案你可以使用它:
$("ul.opt").addClass("hidden");
$('#filter > li > a').on("click", function (e) {
var cache = $(this).next().children();
$('#filter ul:visible').not(cache).hide();
cache.toggle();
});