- addEventListener на динамически создаваемых элементах не работает
- 3 ответа
- Casino Siteleri Listesi – Canlı Sunumlar ve 2021 Yılının En İyileri
- Online casino sitelerini karşılaştırırsak ortaya ne tür bir tablo çıkıyor?
- Online ve Canlı Casino Siteleri 2021
- Событие Click не работает с динамически сгенерированными элементами [дубликат]
- при нажатии на кнопку. Я также определил событие click, связанное с test . Но событие не работа.
- 20 ответов
- LIVE DEMO
- Введение в браузерные события
- Обработчики событий
- Использование атрибута HTML
- Использование свойства DOM-объекта
- Доступ к элементу через this
- Частые ошибки
- addEventListener
- Объект события
- Объект-обработчик: handleEvent
- Итого
addEventListener на динамически создаваемых элементах не работает
Я пытаюсь создать привычный трекер и хочу, чтобы при нажатии на него менялся цвет иконки. Но так или иначе это не работает хорошо.
Я понимаю, что вы не можете напрямую использовать querySelectorAll и затем addEventListener для динамически создаваемого элемента. Это работает случайным образом, если я нажимаю несколько раз, но переключение не работает вообще. Любая помощь будет очень цениться!
3 ответа
Посмотрите на сгенерированный DOM и добавьте console.log(e.target) перед вашим if оператором.
Когда вы создаете элемент , font-awesome заменяет его элементом , содержащим
Элемент является членом класса, а элемент
В результате переключение работает только в том случае, если вы щелкнете изображение SVG за пределами области, покрытой звездой .
Вы можете изменить логику, чтобы она проверяла, является ли элемент, на который щелкнули, сам SVG или
, который рисует звезду внутри него.
. или найдите в DOM любого предка, который соответствует ему (который будет работать с более сложными SVG).
Ближайший будет соответствовать самому элементу (он не предназначен для предков only ). Вы можете обойтись без теста, чтобы увидеть, существует ли e.target , потому что он всегда будет присутствовать в событии клика.
То, что вы можете сделать, это присоединить слушатель события к элементу при его создании:
Источник
Casino Siteleri Listesi – Canlı Sunumlar ve 2021 Yılının En İyileri
Online casino sitelerini karşılaştırırsak ortaya ne tür bir tablo çıkıyor?
Online canlı casino sitelerinde oyun oynamak isteyen müşteriler, seçtikleri casinoyu önceden güvenilir olup olmadığı konusunda çok iyi araştırmaları lazım. İnternet’te yaklaşık 2000 tane online casino sitesi var ve bunların arasına sürekli yenileri katılıyor.
Fakat Türkiye’de bu pazar illegal olduğu için güvenilirliğini yitiren site ve marka sayısı diğer pazara nazaren çok yüksek. Bu nedenle her bu online casino sitesinin verdiği sözleri tutmadığını dikkate almalıyız. Uzun senelerin meyvesi olan geniş tecrübemizden dolayı bu alanda birçok pozitif, ama maalesef bazı negatif deneyimlerimiz de oldu. Sizin de bu alanda kötü bir hadise yaşamamanız için tüm oyunseverler adına ‘Online Casino Karşılaştırmasını’ ince bir şekilde hazırladık.
Burada güvenilir ve lisanslı siteler haricinde ülkemizdeki şans oyunları branşında bulunan sitelerin incelemelerini de bulabilirsiniz. Sitemizde genel olarak casino oyunları, slot makine oyunları yahut canlı oyunlarla ilgili çok çeşitli bilgiler mevcut. Buradaki makaleleri okuyup oyunlara başlamadan önce tecrübe edinebilirsiniz.
Canlı Casino Siteleri
Aşağıdaki tablo sizlere hangi canlı casino sitesinin en iyiler arasında olduğunu ve buna göre casino karşılaştırmasının nasıl ele alındığını göstermekte. Listedeki tüm casinolarda farklı kişilerle çok ayrıntılı bir testler yaptık. Bizim için en önemlisi, tüm detayları farklı bakış açılarından incelemek ve sonuç itibariyle sizlere bağımsız ve özenli bir karşılaştırma sunmak. Sitelerin her biri Türkçe casino siteleri olmakta. Şunu da mutlaka bilmeniz gerekiyor, Türkiye’de yasal casino sitesi yoktur arkadaşlar!
Casino karşılaştırmalarımızda bu şekil çalışmaktayız:
İlk başta edindiğimiz tüm bilgileri en önemli faktörleriyle bir araya topluyoruz. Ardından en ince detaylarına kadar ilerleyip puanına göre farklı online casinoları değerlendiriyoruz.
Farklı alanlarda en fazla 10 puan verilmekte (1 puan = ½ yıldız, 2 puan = 1 yıldız vs…)
Casino karşılaştırmalarımızdaki amacımız tüm bu piyasada aktif olan ve yeni başlayanlara karar vermekte yardım etmek. Eninde sonunda elbette herkes kendi iradesiyle doğru olan siteyi bulacaktır.
Renkler ve zevkler tartışılmaz, bazıları için slot makine oyunları çok önemli, bazıları ise genel oyun sunumuna veya bonuslara önem vermekte. Prensip olarak biz casino karşılaştırmalarımızda sadece ciddi ve güvenilir casino sitelerinde değerlendirmeye almaktayız.
Yukarıda belirttiğimiz puan verilen altı kriterden hariç oyun grafikleri hakkında da bilgi alacaksınız. Sonunda da netice olarak toplam puanı göreceksiniz. Detaylı özetleri tüm casinoseverler canlı casino siteleri karşılaştırmaları tablosundaki casinonun üzerine tıklayarak okuyabilirler. Tavsiye ettiğimiz en kaliteli markalar bunlardır:
Online ve Canlı Casino Siteleri 2021
Burada çeşitli markaları sizlere tanıtıyoruz. Bu online markaların tamamı aynı zamanda canlı casino siteleri oluşturmakta. Her birinde çok çeşitli masa oyunları, poker, blackjack, bakara, keno yahut slot oyunları bulunmakta. Ayrıca hemen hemen hepsi giriş yapıp kayıt olduktan sonra çok güzel bir bonus fırsatı sunuyorlar kullanıcılarına. Bununla birlikte sitelerde oyun oynamaya başladığınız zaman belirli bir rakamı hediye etmiş oluyorlar sizlere. Fakat her bonusun çevrim şartı var, bunu sakın unutmayın. Bu çevrim şartını yerine getirmeden önce para çekme talebi veremiyorsunuz – bu nedenle bonusu almadan önce iyi düşünün. Bunun haricinde son olarak buradaki sitelerin tamamının lisanslı olduğunu ve bu nedenle güvenilir kategorisine girdiğinin altını çizmek istiyoruz.
Источник
Событие Click не работает с динамически сгенерированными элементами [дубликат]
этот вопрос уже есть ответ здесь:
- привязка событий к динамически созданным элементам? 23 ответов
Я пытался создать новый тег с именем класса test на
при нажатии на кнопку. Я также определил событие click, связанное с test . Но событие не работа.
может кто-нибудь помочь?
20 ответов
The click() привязка, которую вы используете, называется» прямой » привязкой, которая будет присоединять обработчик только к элементам, которые уже есть. Он не будет привязан к элементам, созданным в будущем. Для этого вам нужно будет создать «делегированную» привязку с помощью on() .
делегированные события имеют то преимущество, что они могут обрабатывать события из дочерних элементов, которые добавляются в документ позже время.
вот что вы ищете:
выше работает для тех, кто использует jQuery версии 1.7+. Если вы используете более старую версию, обратитесь к предыдущему ответу ниже.
Предыдущий Ответ:
работал для меня. попытался это С jsFiddle.
или есть новый способ сделать это с delegate() :
на .on() метод позволяет делегировать любой желаемый обработчик событий:
настоящее элементы или будущее элементы, добавленные в DOM позже.
P. S: Не используйте .live() ! Из jQuery 1.7+ the .live() метод устарел.
причина:
в jQuery нажмите () — присоединяет обработчик событий, только если элемент уже существует в html-коде.
Он не будет рассматривать новый элемент, который создается динамически(элемента) после загрузки страницы.
динамические элементы создаются с помощью javascript или jquery (не в html).
таким образом, событие click не срабатывает.
решение :
чтобы преодолеть это, мы должны использовать on ()
добавить эту функцию в JS файл. Он будет работать на любом браузере
LIVE DEMO
вам нужно использовать .жить для этого:
или если вы используете jquery 1.7 + use .on:
попробовать .live() или .delegate()
код .test элемент был добавлен после .click() метод, поэтому к нему не было прикреплено событие. Live и Delegate дают этот триггер события родительским элементам, которые проверяют своих детей, поэтому все, что добавлено впоследствии, все еще работает. Я думаю, что Live проверит весь документ, в то время как делегат может быть передан элемент, поэтому делегирование более эффективно.
Я нашел два решения в документации jQuery:
во-первых: используйте делегат на теле или документе
ответ: прикрепить обработчик к одному или более событий для всех элементов, которые соответствуют селектор, сейчас или в будущем, на основе определенного набора корневых элементов. ссылка:http://api.jquery.com/delegate/
во-вторых: поместите свою функцию в «$( документ )», используя «на» и прикрепите его к элементу, который вы хотите запустить. Первый параметр — это «обработчик событий», Второй-элемент и третий-функция. Например:
ответ: обработчики событий привязаны только к выбранным элементам; они должны существовать на странице во время вызова кода .on (). Чтобы убедиться, что элементы присутствуют и могут быть выберите, выполните привязку событий внутри обработчика готовности документа для элементов, которые находятся в разметке HTML на странице. Если на страницу вводится новый HTML, выберите элементы и присоедините обработчики событий после того, как новый HTML будет помещен на страницу. Или используйте делегированные события для присоединения обработчика событий, как описано далее . ссылка:https://api.jquery.com/on/
лучший способ применить событие к динамически генерируемому контенту с помощью делегирования.
Итак, ваш код теперь такой
будет работать только если DIV с классом .surrounding_div_class является непосредственным родителем объекта .тест
Если в div есть другой объект, который будет заполнен, он не будет работать.
проблема заключается в том, что вы пытаетесь привязать класс «test» к событию, прежде чем в DOM . Хотя может показаться, что все это динамично, на самом деле происходит JQuery делает пас над DOM и подключает событие click, когда ready() функция уволена, что происходит до того, как вы создали «нажмите меня» в событии кнопки.
добавив событие» test «Click в обработчик щелчка» button», он будет подключите его после того, как правильный элемент существует в DOM .
используя live() (как уже упоминалось) — это еще один способ сделать это, но я чувствовал, что это также хорошая идея, чтобы указать на небольшие ошибки в JS коде. То, что вы написали, не было неправильным, его просто нужно было правильно определить. Схватывая, как DOM и JS works — одна из сложных вещей для многих традиционных разработчиков, чтобы обернуть голову.
live() это более чистый способ справиться с этим и в большинстве случаев-это правильный путь. Он по существу наблюдает за DOM и перемонтировать вещи, когда элементы внутри него меняются.
.живая функция работает отлично.
Это для динамически добавляемых элементов на сцену.
Jquery .on работает нормально, но у меня были некоторые проблемы с рендерингом, реализующим некоторые из решений выше. Моя проблема с использованием .on это то, что каким-то образом он отображал события иначе, чем .hover метод.
просто fyi для всех, кто также может иметь проблему. Я решил свою проблему, повторно зарегистрировав событие hover для динамически добавляемого элемента:
перерегистрируйте событие наведения, потому что наведение не работает для динамически созданного предметы. поэтому каждый раз, когда я создаю новый / динамический элемент, я снова добавляю код наведения. работает отлично
Я не мог получить live или делегировать работу над div в лайтбоксе (tinybox).
я использовал функции setTimeout successfullly, по следующим простым способом:
также вы можете использовать onclick=»do_something(this)» внутри элемента
Альтернативная и более лаконичная альтернатива (IMHO) — использовать необработанную функцию javascript, которая отвечает на событие on click, а затем передать целевой элемент обратно в jQuery, если хотите. Преимущество этого подхода заключается в том, что вы можете динамически добавлять свой элемент в любом месте, а обработчик click будет «просто работать», и вам не нужно беспокоиться о делегировании управления родительским элементам и т. д.
Шаг 1: обновление динамического html для запуска onclick событие. Обязательно передайте объект «event» в качестве аргумента
Шаг 2: создайте тестовую функцию для ответа на событие click
Шаг 3: учитывая, что вы используете jQuery, я предполагаю, что будет полезно получить ссылку на кнопку источника
Я работаю с таблицами, динамически добавляя к ним новые элементы, и при использовании on () единственный способ заставить его работать для меня-использовать нединамический родитель как:
Это действительно полезно, потому что, чтобы удалить события связаны с on (), вы можете использовать off(), и использовать события один раз, вы можете использовать one ().
вы можете добавить щелчок к динамически созданным элементам. Пример ниже. Использование Когда, чтобы убедиться, что это сделано. В моем примере я хватаю div с классом expand, добавляя диапазон» click to see more», а затем используя этот диапазон, чтобы скрыть/показать исходный div.
если у вас есть динамически добавленная ссылка на какой-либо контейнер или тело:
вы можете взять его необработанный элемент javascript и добавить к нему прослушиватель событий, например клик:
независимо от того, сколько раз вы добавляете этот новый экземпляр ссылки, вы можете использовать его, как если бы вы использовали jquery
используйте «on», поскольку щелчок получает привязку к уже присутствующим элементам.
Источник
Введение в браузерные события
Событие – это сигнал от браузера о том, что что-то произошло. Все DOM-узлы подают такие сигналы (хотя события бывают и не только в DOM).
Вот список самых часто используемых DOM-событий, пока просто для ознакомления:
События мыши:
- click – происходит, когда кликнули на элемент левой кнопкой мыши (на устройствах с сенсорными экранами оно происходит при касании).
- contextmenu – происходит, когда кликнули на элемент правой кнопкой мыши.
- mouseover / mouseout – когда мышь наводится на / покидает элемент.
- mousedown / mouseup – когда нажали / отжали кнопку мыши на элементе.
- mousemove – при движении мыши.
События на элементах управления:
- submit – пользователь отправил форму .
- focus – пользователь фокусируется на элементе, например нажимает на .
Клавиатурные события:
- keydown и keyup – когда пользователь нажимает / отпускает клавишу.
События документа:
- DOMContentLoaded – когда HTML загружен и обработан, DOM документа полностью построен и доступен.
CSS events:
- transitionend – когда CSS-анимация завершена.
Существует множество других событий. Мы подробно разберём их в последующих главах.
Обработчики событий
Событию можно назначить обработчик, то есть функцию, которая сработает, как только событие произошло.
Именно благодаря обработчикам JavaScript-код может реагировать на действия пользователя.
Есть несколько способов назначить событию обработчик. Сейчас мы их рассмотрим, начиная с самого простого.
Использование атрибута HTML
Обработчик может быть назначен прямо в разметке, в атрибуте, который называется on .
Например, чтобы назначить обработчик события click на элементе input , можно использовать атрибут onclick , вот так:
При клике мышкой на кнопке выполнится код, указанный в атрибуте onclick .
Обратите внимание, для содержимого атрибута onclick используются одинарные кавычки, так как сам атрибут находится в двойных. Если мы забудем об этом и поставим двойные кавычки внутри атрибута, вот так: onclick=»alert(«Click!»)» , код не будет работать.
Атрибут HTML-тега – не самое удобное место для написания большого количества кода, поэтому лучше создать отдельную JavaScript-функцию и вызвать её там.
Следующий пример по клику запускает функцию countRabbits() :
Как мы помним, атрибут HTML-тега не чувствителен к регистру, поэтому ONCLICK будет работать так же, как onClick и onCLICK … Но, как правило, атрибуты пишут в нижнем регистре: onclick .
Использование свойства DOM-объекта
Можно назначать обработчик, используя свойство DOM-элемента on .
К примеру, elem.onclick :
Если обработчик задан через атрибут, то браузер читает HTML-разметку, создаёт новую функцию из содержимого атрибута и записывает в свойство.
Этот способ, по сути, аналогичен предыдущему.
Обработчик всегда хранится в свойстве DOM-объекта, а атрибут – лишь один из способов его инициализации.
Эти два примера кода работают одинаково:
Так как у элемента DOM может быть только одно свойство с именем onclick , то назначить более одного обработчика так нельзя.
В примере ниже назначение через JavaScript перезапишет обработчик из атрибута:
Кстати, обработчиком можно назначить и уже существующую функцию:
Убрать обработчик можно назначением elem.onclick = null .
Доступ к элементу через this
Внутри обработчика события this ссылается на текущий элемент, то есть на тот, на котором, как говорят, «висит» (т.е. назначен) обработчик.
В коде ниже button выводит своё содержимое, используя this.innerHTML :
Частые ошибки
Если вы только начинаете работать с событиями, обратите внимание на следующие моменты.
Функция должна быть присвоена как sayThanks , а не sayThanks() .
Если добавить скобки, то sayThanks() – это уже вызов функции, результат которого (равный undefined , так как функция ничего не возвращает) будет присвоен onclick . Так что это не будет работать.
…А вот в разметке, в отличие от свойства, скобки нужны:
Это различие просто объяснить. При создании обработчика браузером из атрибута, он автоматически создаёт функцию с телом из значения атрибута: sayThanks() .
Так что разметка генерирует такое свойство:
Используйте именно функции, а не строки.
Назначение обработчика строкой elem.onclick = «alert(1)» также сработает. Это сделано из соображений совместимости, но делать так не рекомендуется.
Не используйте setAttribute для обработчиков.
Такой вызов работать не будет:
Регистр DOM-свойства имеет значение.
Используйте elem.onclick , а не elem.ONCLICK , потому что DOM-свойства чувствительны к регистру.
addEventListener
Фундаментальный недостаток описанных выше способов назначения обработчика –- невозможность повесить несколько обработчиков на одно событие.
Например, одна часть кода хочет при клике на кнопку делать её подсвеченной, а другая – выдавать сообщение.
Мы хотим назначить два обработчика для этого. Но новое DOM-свойство перезапишет предыдущее:
Разработчики стандартов достаточно давно это поняли и предложили альтернативный способ назначения обработчиков при помощи специальных методов addEventListener и removeEventListener . Они свободны от указанного недостатка.
Синтаксис добавления обработчика:
Для удаления обработчика следует использовать removeEventListener :
Для удаления нужно передать именно ту функцию-обработчик которая была назначена.
Вот так не сработает:
Обработчик не будет удалён, т.к. в removeEventListener передана не та же функция, а другая, с одинаковым кодом, но это не важно.
Вот так правильно:
Обратим внимание – если функцию обработчик не сохранить где-либо, мы не сможем её удалить. Нет метода, который позволяет получить из элемента обработчики событий, назначенные через addEventListener .
Метод addEventListener позволяет добавлять несколько обработчиков на одно событие одного элемента, например:
Как видно из примера выше, можно одновременно назначать обработчики и через DOM-свойство и через addEventListener . Однако, во избежание путаницы, рекомендуется выбрать один способ.
Существуют события, которые нельзя назначить через DOM-свойство, но можно через addEventListener .
Например, таково событие DOMContentLoaded , которое срабатывает, когда завершена загрузка и построение DOM документа.
Так что addEventListener более универсален. Хотя заметим, что таких событий меньшинство, это скорее исключение, чем правило.
Объект события
Чтобы хорошо обработать событие, могут понадобиться детали того, что произошло. Не просто «клик» или «нажатие клавиши», а также – какие координаты указателя мыши, какая клавиша нажата и так далее.
Когда происходит событие, браузер создаёт объект события, записывает в него детали и передаёт его в качестве аргумента функции-обработчику.
Пример ниже демонстрирует получение координат мыши из объекта события:
Некоторые свойства объекта event :
event.type Тип события, в данном случае «click» . event.currentTarget Элемент, на котором сработал обработчик. Значение – обычно такое же, как и у this , но если обработчик является функцией-стрелкой или при помощи bind привязан другой объект в качестве this , то мы можем получить элемент из event.currentTarget . event.clientX / event.clientY Координаты курсора в момент клика относительно окна, для событий мыши.
Есть также и ряд других свойств, в зависимости от типа событий, которые мы разберём в дальнейших главах.
При назначении обработчика в HTML, тоже можно использовать объект event , вот так:
Это возможно потому, что когда браузер из атрибута создаёт функцию-обработчик, то она выглядит так: function(event) < alert(event.type) >. То есть, её первый аргумент называется «event» , а тело взято из атрибута.
Объект-обработчик: handleEvent
Мы можем назначить обработчиком не только функцию, но и объект при помощи addEventListener . В этом случае, когда происходит событие, вызывается метод объекта handleEvent .
Как видим, если addEventListener получает объект в качестве обработчика, он вызывает object.handleEvent(event) , когда происходит событие.
Мы также можем использовать класс для этого:
Здесь один и тот же объект обрабатывает оба события. Обратите внимание, мы должны явно назначить оба обработчика через addEventListener . Тогда объект menu будет получать события mousedown и mouseup , но не другие (не назначенные) типы событий.
Метод handleEvent не обязательно должен выполнять всю работу сам. Он может вызывать другие методы, которые заточены под обработку конкретных типов событий, вот так:
Теперь обработка событий разделена по методам, что упрощает поддержку кода.
Итого
Есть три способа назначения обработчиков событий:
- Атрибут HTML: onclick=». » .
- DOM-свойство: elem.onclick = function .
- Специальные методы: elem.addEventListener(event, handler[, phase]) для добавления, removeEventListener для удаления.
HTML-атрибуты используются редко потому, что JavaScript в HTML-теге выглядит немного странно. К тому же много кода там не напишешь.
DOM-свойства вполне можно использовать, но мы не можем назначить больше одного обработчика на один тип события. Во многих случаях с этим ограничением можно мириться.
Последний способ самый гибкий, однако нужно писать больше всего кода. Есть несколько типов событий, которые работают только через него, к примеру transitionend и DOMContentLoaded . Также addEventListener поддерживает объекты в качестве обработчиков событий. В этом случае вызывается метод объекта handleEvent .
Не важно, как вы назначаете обработчик – он получает объект события первым аргументом. Этот объект содержит подробности о том, что произошло.
Мы изучим больше о событиях и их типах в следующих главах.
Источник