Вы можете использовать раствор из Event binding on dynamically created elements?, как это было предложено https://stackoverflow.com/users/502381/juhana:
HTML:
<span class="button_container"><span class="button slide_out">Click me</span></span>
<div id="testbox">Whohoohoooo, I am slidiiing!<br><br><small>Hey… wait! Why I am not sliding up again?</small></div>
JS:
$('.button_container').on('click', '.slide_out', function() {
$(this).toggleClass('slide_out').toggleClass('slide_in');
$('#testbox').slideDown();
});
$('.button_container').on('click', '.slide_in', function() {
$(this).toggleClass('slide_out').toggleClass('slide_in');
$('#testbox').slideUp();
});
http://jsfiddle.net/ag3cpcfb/
Но, на мой взгляд, было бы лучше, чтобы сделать код более простым с помощью slideToggle()
и настроить CSS классы:
HTML:
<span class="button">Click me</span>
<div id="testbox">Whohoohoooo, I am slidiiing!<br><br><small>Hey… wait! Why I am not sliding up again?</small></div>
JS:
$('.button').on('click', function() {
var $testbox = $('#testbox');
if ($testbox.is(':visible')) {
console.log('Click 1');
} else {
console.log('Click 2');
}
$(this).toggleClass('slide_in');
$testbox.slideToggle();
});
http://jsfiddle.net/k77ferjh/
Но это постоянно срабатывает, когда вы нажимаете кнопку. Если это не проблема, хорошо, если он есть, вы можете также использовать номер для отслеживания ваших кликов:
JS:
var clicks = 0;
$('.button').on('click', function() {
clicks++;
if (clicks % 2 == 0) {
console.log('Slide out');
} else {
console.log('Slide in');
}
$(this).toggleClass('slide_in');
$('#testbox').slideToggle();
});
http://jsfiddle.net/k77ferjh/1/
возможно дубликат [Event обязательным динамически созданные элементы?] (http://stackoverflow.com/questions/203198/event-binding-on-dynamically-created-elements) – JJJ
http://jsfiddle.net/hvxyjykj/ –
Извините, я не понимаю, как это возможно дубликат ответил бы на мой вопрос. Может быть, я застрял внутри коробки! Большое спасибо @Learner за ваше решение! –