0

我有一个手风琴,只针对“collapseLinks”类指定的锚元素,我试图用:not()选择器排除“vanilla”类。“vanila”类只是我希望表现正常的锚。现在,当您单击“香草”锚时,它也会触发手风琴。任何帮助都会很棒!

$('a.collapseLinks').click(function() {
    $("div.slider > a.collapseLinks").click(function() {
        $(this).children(".slider > a.collapseLinks").toggle();
    });

    $(this).toggleClass('collapseLinksClicked');
});

// Stuff to do as soon as the DOM is ready;
$(".internal").hide();

$("input").attr("disabled", "disabled");

$(".slider:not(.vanilla)").click(function() {
    $(this).next(".internal:not(.vanilla)").slideToggle();
}).toggle(function() {
    $(this).children("span").text("-");
}, function() {
    $(this).children("span").text("+");
});
4

2 回答 2

0

您的第一个“单击”处理程序正在添加一个新的事件处理程序,每次单击它时,这些都不会覆盖以前的处理程序。仔细想想你到底想要做什么,并清理那个方法。根据您的描述,给您一个建议:

$('a.collapseLinks').click(function() {
    $(this).next("div.slider").toggle();
    $(this).toggleClass('collapseLinksClicked');
});

在自 1.6 以来的每个 jQuery 版本中,禁用输入元素的正确方法是:

$("input").prop("disabled", true);

最后,您的第二个“点击”处理程序正在查找“滑块”元素(我假设所有这些元素都是<div>元素),然后尝试过滤掉“香草”元素(我假设它们都是<a>元素)。此外,没有签名.toggle将两个函数作为参数。

$("div.slider").click(function() {
    $(this)
        .next("div.internal")
        .slideToggle().end()
        .toggle(function() {
            if ( $(this).is(':visible') ) {
                $(this).children("span").text("-");
            }
            else {
                $(this).children("span").text("+");
            }
        });
});
于 2012-12-14T15:54:58.560 回答
-1

您应该在不想传播的处理程序中使用 stopPropagation:http: //api.jquery.com/event.stopPropagation/

$("a.vanila").click(function(event){
  event.stopPropagation();
  // do something
});  

干杯。

于 2012-12-14T15:15:06.363 回答