2010-11-02 4 views
5

Очень просто поставить: строка currentItem.toggleClass('open'); не работает.jQuery toggleClass не работает?

Точнее, при проверке результатов с помощью firebug я вижу, что класс «открыт» мигает (появляется и сразу исчезает) на соответствующем элементе. Так что, как будто функция запускается дважды (конечно, я только один раз кликнул).

Может кто-нибудь объяснить мне, почему это так и как предотвратить это?

Вот мой 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> 

Заранее спасибо.

+1

Вы уверены, что не используете функцию дважды? – NOtherDev

+0

@A .: Я так не думаю: это единственный раз, когда я использую «.click()» на моей странице, а также единственный раз, когда я изменяю это имя класса. Я также пытался использовать другие имена классов без каких-либо лучших результатов. – s427

+0

@A .: На самом деле вы были правы! Я работаю с фреймворком (Prado), которого я не очень хорошо знаю, и я не знал, что JS-файл был дважды включен в заголовок HTML. Исправление этого проблемы решило проблему. Благодаря! – s427

ответ

12

Проблема решена: файл JS был фактически включен дважды в голову HTML, что заставляло функцию запускаться дважды с каждым щелчком.

+0

После того, как я ударил головой о клавиатуру как час, ваш комментарий сделал это для меня ... Я включил его дважды. Ughhhhh –

2

У меня была схожая проблема на моем сайте, и я обнаружил, что я случайно продублировал крюк toggleclass на дне, когда он сначала возился с ним. К сожалению! Удостоверьтесь, что ищете двойные звонки!

1

У меня была аналогичная проблема, как это сделать:

HTML:

<a>JS-link</a> 

ЯШ:

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

результаты в щелчки быть регистр дважды!

1

У меня была такая же проблема, и я понял, что я случайно связал функцию дважды. Я изначально хотел переместить код из одного файла javascript в другой, но случайно оставил оригинал на своем месте.

Смежные вопросы