В чем проблема? На сайте при нажатии на кнопку, jQuery создает выпадающее меню из тегов <li>. т.е. li генерирятся динамически. Первоначально на сайте их нет, то есть если на кнопку нажать 5 раз, то создается 5 тегов <li> т.е меню из 5 строк. Но вот когда я нажимая на сами теги <li> Т.е привязываю к тегам li функцию click то она не работает Код (Javascript): генерация выпадающего меню if ($(".menu").find("li").length = 0 ){ $(".menu").html('<li class="submenu"><a name="' + src + '" href="javascript:void(0)">Video1</a></li>'); }else{ $(".menu").prepend('<li class="submenu"><a name="' + src + '" href="javascript:void(0)">Video' + (mylikes) + '</a></li>'); }; Привязываю к строке выпадающего меню click функцию $('.submenu').click(function(){ //при клике на строке выпад меню alert("сработало");});
Спасибо заработало, а можете объяснить разницу? просто в коде у меня есть такая функция и она работает Код (Javascript): $('#palets').click(function(){}); В чем разница через .on() или .click()
Разница в том, что ты создаешь элемент и jquery не успевает инициализировать его. Поэтому поиск происходит от родителя. Что касаемо on и click - то они не отличаются ничем. Вы могли использовать $('#element').click('#button', function() {}); и ничего не изменилось бы. Просто это мой стиль кода и иногда on выгоднее использовать, например: Код (Javascript): var typeOn = 'click'; $('element').on(typeOn, function() {});
Спасибо что объяснили, такие вещи в справочниках как правило мало упоминаются. Всегда полезна спросить у профессионала
Разница в том, что ни о каком "успевании инициализации" тут речи быть не может. Даже на этом форуме не раз звучало такое понятие, как "делегирование событий". Вот тут начинаются все разницы, в том числе и между методами .on() и другими методами событий, как, например, .click(). Это всё потому, что начинаете изучение не с того, что нужно. jQuery - это JavaScript библиотека и было бы логичней сначала изучить именно язык, а потом использовать его производные. Если попробовать коротко, то идея делегирования состоит в том, что обработчик события устанавливается не на какой-то конкретный элемент(ы), а на статический и предполагаемо родительский для ожидаемого. Такой принцип чаще всего используется для динамически создаваемых элементов документа. Всё дело в том, что JS "живёт" в том же временном промежутке, что и DOM, с которым он загружается на клиенте. Т.е. JS знает только о тех элементах, которые были загружены в браузер до того, как был загружен он сам, а обо всех элементах, которые могут появляться позже - он понятия не имеет. Поэтому можно установить обработчик события на известный элемент и, ориентируясь на "объект события" и его свойство "target", вычислять нужный нам. Свойство target возвращает именно тот элемент, на котором реально произошло событие. Например, у нас есть <div>, а внутри него <span> или другой дочерний элемент. Обработчик события "click" устанавливаем на <div>. При клике внутри div-а на span, сработает событие и target вернет нам именно span, хотя на него событие мы не вешали. Дальше мы можем проверить - тот ли это элемент, что мы ожидаем и, если да, то можем с ним работать. Это же будет рабоnать, если span появиться внутри div-а позже (динамически). Вот простейший пример. HTML: <div class="parent"> <div class="child"> <div class="grandchild"></div> </div> </div> Код (Javascript): document.addEventListener('click', e => { if (e.target.tagName === 'BUTTON') { console.log('А вот и наша кнопка приехала!'); } else { console.log('Это не кнопка...'); } }); // Через 5сек добавим кнопку setTimeout(() => { document.querySelector('.grandchild').innerHTML = `<button>Hi there!</button>`; }, 5000);
Спасибо за ваше пояснение. Понял ваши мысли после 7 прочтения. Тяжело для восприятия вы пишите, просьба, для людей который только начинают свой путь, писать: 1. короче. 2. приводит аналогии доступные людям, которые первый раз взялись за изучение ЯП (те кто уже имеют опыт в каком то другом языке программирования для них ваши пояснения более менее понятны). К примеру мне нравятся аналогии из "Изучаем php и mysql" Линн бейли и и Майкл Морисон. Вообще все ЯП как правило пишутся с высоким уровнем абстракции, не доступный рядовым и начинающим . И чтоб понимать эту абстракцию надо затратить много времени. В одной из книг мне понравилась ассоциация Что присвоение переменной это как взять обувную коробку написать на ней название (имя переменой) и положить в нее записку (присвоить значение). А ссылка на переменную это как взять ниточку и привязать записку расположенной внутри коробки. Для профессиональных программистов то что я пишу наверное ужас, но начинающим надо начинать с понятных и доступным для понимания вещей.