7

很简单地说:这条线currentItem.toggleClass('open');似乎不起作用。

更准确地说,当使用 firebug 检查结果时,我可以看到类“open”在相关元素上闪烁(出现并立即消失)。所以这就像函数实际上被触发了两次(当然我只点击了一次)。

有人可以解释一下为什么会这样以及如何预防吗?

这是我的 jQuery 代码:

$('div.collapse ul.radio_list li input[type=radio]').click(function (event) {

    var currentTree = $(this).parent().parent().parent();
    var currentItem = $(this).parent().parent();
    var currentGroup = currentItem.attr('rel');

    $(this).parents('ul').children('li').removeClass('select');
    if ($(this).is(':checked')) {
        currentItem.addClass('select');
    }

    currentItem.toggleClass('open');

    var currentLevel = 0;
    if (currentItem.is('.level1')) {currentLevel = 1;}
    if (currentItem.is('.level2')) {currentLevel = 2;}
    if (currentItem.is('.level3')) {currentLevel = 3;}
    var nextLevel = currentLevel + 1;

    currentTree.children('li').filter('li[rel ^=' + currentGroup + '].level' + nextLevel).animate({'height': 'show', 'opacity': 'show'}, 250).addClass('currentChild');
});

这是我的 HTML 代码的一部分,为了更好的可读性,稍微简化了一些(我知道不是很漂亮,但我对 HTML 输出的控制有限):

<div class="col_left collapse">
    <ul class="radio_list" rel="7">
        <li class="onglet level0" rel="group1">
            <span class="onglet level0">
                <input type="radio" />
                    <label>Services Pratiques</label></span>
            <input type="hidden" value="1">
        </li>

提前致谢。

4

4 回答 4

12

问题解决:js文件实际上在html头中包含了两次,导致每次点击都会触发两次函数。

于 2010-11-02T11:41:25.063 回答
1

我在我的网站上遇到了类似的问题,我发现在第一次弄乱它时,我不小心在底部一直复制了 toggleclass 钩子。哎呀!确保寻找双重电话!

于 2011-08-30T21:33:18.410 回答
1

我有一个类似的问题这样做:

html:

<a>JS-link</a>

js:

$('a').click(function(event) {
    ... my stuff ...
    # Forgot to do event.preventDefault(); !!
}

导致点击被注册两次!

于 2013-04-17T15:01:33.837 回答
1

我遇到了同样的问题,并意识到我不小心绑定了该函数两次。我原本打算将代码从一个 javascript 文件移动到另一个文件,但不小心将原始文件留在了原来的位置。

于 2015-12-17T03:17:44.647 回答