Я пытаюсь создать эффект аккордеона для документа, где, когда вы нажимаете на <h1>
остальную часть документа (<div.container>
) с переключателем, сдвигающимся вверх и сползающим вниз. Однако я все время сталкиваюсь с проблемой. Вот код:Неверный объект, на который ссылается при активации события click
HTML
<article>
<h1>Title</h1>
<div class="container">
//...
</div>
</article>
<article>
//...
</article>
<article>
//...
</article>
CoffeeScript:
articles = $('article').toArray()
for article in articles
#console.log $('.container', article).parent().attr('id')
$('h1', article).click ->
$('.container', article).slideToggle 'slow'
Когда я использую article
переменную сказать ... console.log
Она вращается через статьи и печатает обратно свои идентификаторы. Но когда я нажимаю на любой из элементов <h1>
, он всегда сбрасывает последние <article>
с <div.container>
.
Я думаю, что это потому, что переменная article
хранится за пределами области цикла for
в CoffeeScript, и щелчок не выполняется до тех пор, пока цикл не будет завершен.
Если это правда, Как я могу гарантировать, что на объект, на который ссылается объект, будет называться? Было бы лучше просто использовать цикл for i in [0...3]
и просто ссылаться на массив напрямую? Проблема в другом? Спасибо за помощь!
Для тех, кто не знаком с CoffeeScript, вот-код, который компилируется (просто игнорировать _results переменного):
var articles
articles = $('article').toArray();
_results = [];
for (_i = 0, _len = articles.length; _i < _len; _i++) {
article = articles[_i];
_results.push($('h1', article).click(function() {
return $('.container', article).slideToggle('slow');
}));
}
Я пометю Rocco как ответ, так как он пришел первым, но всегда приятно видеть, как много решений для одной проблемы в JavaScript. Спасибо за помощь, ребята! – webdesserts