2013-02-15 5 views
1

Я создал некоторый быстрый код JQuery переключения:JQuery основного переключение работает только один путь

$("#expander.closed").click(function(){ 
    console.log("opening"); 
    $("#expander").removeClass(); 
    $("#expander").addClass("open"); 
}); 
$("#expander.open").click(function(){ 
    console.log("closing"); 
    $("#expander").removeClass(); 
    $("#expander").addClass("closed"); 
}); 

Идея заключается в том, что каждый раз, когда вы нажимаете #expander клевантов класса между open и closed.

Однако по какой-то причине он работает только один раз, меняя с closed на open, а затем не идет дальше.

У меня нет подсказки, почему. Here's a jsFiddle.

ответ

2

Я думаю, что в самом начале, когда вы связываете события, .closed класса не существует, поэтому событие не становится связанным

Может быть, вы должны связать это событие с некоторыми другими критериями, или использовать live. который является устаревшим, хотя

Лучше всего было бы, как этот

$("#expander_parent").on('click', '#expander.closed', function(){ 
    // Do your stuff 
}) 
+0

Спасибо за ваш ответ. Почему лучше использовать родительский вариант? – ACarter

+0

JQuery 'on' использует триггер события родительского делегата. Но я все равно поеду с решением, которое упростится для вашего дела. Тем не менее, всякий раз, когда у вас нет элементов во время привязки события и вы все еще хотите его использовать, используйте 'on' –

+0

См. Это для справки http://stackoverflow.com/questions/9122078/difference- между-onclick-vs-click –

2

Просто связать его с помощью идентификаторов и переключать классы с помощью .toggleClass

$("#expander").click(function(){ 
    $(this).toggleClass('open closed'); 
}); 

FIDDLE

, если вам нужно сделать другие функции, в зависимости от того, какой класс у вас есть, вы можете проверить это как

$("#expander").click(function(){ 
    var $this = $(this); 
    $this.toggleClass('open closed'); 
    if($this.hasClass('open')){ 
     // do your open code 
    }else{ 
     // do your close code 
    } 
}); 

FIDDLE

+0

Спасибо за ваш ответ. Однако в более широкой схеме вещей мне нужно выполнить другие функции, связанные с тем, как функция переключилась. (В принципе, делайте некоторые анимации одним щелчком мыши, а затем с другой, меняйте анимацию.) Есть ли способ использовать это решение, я могу сделать что-нибудь подобное? Приветствия. – ACarter

+0

@ACarter Я обновил свой ответ, чтобы показать вам :) –

+0

Конечно! Я должен был вспомнить hasClass ...Спасибо :) – ACarter

1

Вы можете сделать это и добавить другие ваши сопутствующие операции в пределах если/других условий

HTML:

<div id="expander" class="closed">Click Me</div> 

CSS:

.closed { 
    background-color: red; 
} 

.open { 
    background-color: blue; 
} 

Javascript:

$("#expander.closed").click(function(){ 
    if ($('#expander').attr('class') === 'closed') { 
      $('#expander').attr('class', 'open'); 

      // Add other related functions here 
    } else { 
     $('#expander').attr('class', 'closed'); 

     // Add other related functions here 
    }  
}); 

http://jsfiddle.net/mCDwy/1/