Я работал над этим простым плагином для практических целей, и я столкнулся со следующей проблемой: В принципе, я хочу иметь несколько ползунков изображений, которые управляются одним и тем же кодом JS, но, очевидно, независимо друг от друга. То, как мне удалось это сделать, - это обработчики Click для кнопок «Left» и «Right» внутри обработчика Click кнопки, которая «активирует» этот конкретный слайдер. Потому что по какой-то причине, если у меня есть обработчики кнопок «Влево/Вправо» за пределами обработчика кнопок «активировать», они не выполняются.Вложенные обработчики кликов в JavaScript плохой практике?
РАБОТЫ:
$('item').click(function() {
var itemNum = $(this).index() + 1;
var $leftArrow = $('#item' + itemNum + ' .left-arrow');
var $rightArrow = $('#item' + itemNum + ' .right-arrow');
$leftArrow.click(...);
$rightArrow.click(...);
});
НЕ РАБОТАЕТ:
var $leftArrow, $rightArrow;
$('item').click(function() {
var itemNum = $(this).index() + 1;
$leftArrow = $('#item' + itemNum + ' .left-arrow');
$rightArrow = $('#item' + itemNum + ' .right-arrow');
});
$leftArrow.click(...);
$rightArrow.click(...);
Так что мой вопрос; это плохая практика делать так? Как и он начнет захватывать дополнительную память, если пользователь активирует слайдер item1, затем активирует слайдер item2 и т. Д. Если да, то для чего лучше.
Извините за такой длинный вопрос, я очень благодарен вам за то, что вы потратили время, чтобы прочитать все это. :)
ПРИМЕЧАНИЕ. Предполагается, что только один слайдер должен быть активирован одновременно.
Вложенные обработчики нажмите, как правило, плохо потому что каждый раз, когда происходит щелчок верхнего уровня, он добавляет еще один обработчик кликов для других объектов, и вы получаете дубликаты обработчиков кликов, что никогда не бывает хорошим. Есть исключения, если вы создаете новый контент каждый клик, а затем добавляете новые обработчики кликов к новому контенту. – jfriend00
Второй не работает, потому что ваши '$ leftArrow' и' $ rightArrow' еще не имеют значения, когда вы пытаетесь назначить свои обработчики кликов. – paulpdaniels
Моя цель здесь обновить '$ leftArrow' и' $ rightArrow' переменные, поэтому обработчики щелчков запускаются ТОЛЬКО в своем конкретном элементе (поэтому я не хочу, чтобы все слайдеры начали перемещаться, если нажата одна из их стрелок). Как еще вы порекомендовали бы я это сделать? – Bazinga