Jquery не работает click по элементу

Почему не срабатывает клик по вложенному элементу (jQuery)?

Очень прошу прощения, что несколько сумбурно задаю вопрос, но я вообще не профи (любитель очень начинающий) в JS, jQuery и всем таком.

В скрипт test.php в div с с помощью jQuery подгружается вывод другого скрипта (pictures.php) с помощью:

В скрипте test.php заранее прописан div:
echo ‘

Скрипт pictures.php генерит примерно такое:

Что-то вроде этого:

В браузере открывается test.php. В зависимости от того, на какую картинку кликнуть, на сервер ajax отправляется id картинки. Если id картинки каким-то образом устраивает/не устраивает, скрипт pictures.php отправляет новые картинки. Все просто. Я для жены (она в дет. саду работает) делаю страничку, чтобы ей удобнее было детей тестировать, как они отличают похожие по произношению слова.

Ну и параллельно изучаю работу ajax, поэтому вариант отправлять просто формой в этот же скрипт не хотел бы ваять. Все умеют ajax, а я пока нет 🙁

В скрипте test.php:
Проблема в том, что по какой-то причине вот этот код:

не отлавливает нажатия на картинку. В Chrome тишина.

Также не срабатывает:

Других картинок на странице test.php нет, поэтому тут уж не перепутаешь. Нет нажатий на img! и все тут.

При этом срабатывает (в скрипте test.php сделал кнопку с >

Это отладочное все, простите за сумбур! В общем, делаю вывод, что у меня jQuery не может напрямую обратиться к подгруженным картинкам! Через div с шв=pictures, который изначально есть в скрипте, id картинок ловятся. Можете подсказать, как так? Почему картинки, которые даже в браузере нормально появляются, невозможно отловить напрямую по из id?

Источник

в jQuery событие click не работает после добавления класса

на моей странице JSP я добавил несколько ссылок:

он имеет функцию jQuery, зарегистрированную для события click:

теперь у меня есть обработчик кликов jQuery для этих ссылок

для первой ссылки он работает нормально. Он предупреждает

  • id. Но на секунду .
  • , где class=»tabclick» добавлено первым jQuery не работает.

    пробовал $(«a.tabclick»).live(«click», function() , но тогда первое событие щелчка по ссылке также не работало.

    7 ответов

    С class добавляется динамически, вам нужно использовать делегирование событий для регистрации обработчика событий

    вы должны использовать следующее:

    Это прикрепит ваше событие к любым якорям в #gentab элемент, уменьшение объема необходимости проверять все document дерево элементов и повышения эффективности.

    .live() устарела.Если вы хотите использовать для делегированных элементов, используйте .на() со следующим синтаксисом

    этот синтаксис будет работать для делегированных событий

    на основе @Arun P Johny вот как вы это делаете для ввода:

    вот как я получил его в jQuery:

    это войдет в консоль: myButton1. Как сказал @Arun, вам нужно добавить событие динамически, но в моем случае вам не нужно сначала звонить родителю.

    хотя лучше было бы сказать:

    Так как это синтаксис JQuery, хотя оба будут работать.

    на событии готовности документа нет тега с классом tabclick. поэтому при добавлении класса tabclick необходимо динамически связывать событие click. пожалуйста, этот код:

    вот еще одно решение, а также метод bind.

    Я знаю, что это старая тема. но ничего из вышеперечисленного мне не помогло. И после долгих поисков и перепробования всего. Я придумал это.

    удалить нажмите кнопку код в $(документ).готовую деталь и кладем в отдельную секцию. затем поместите код клика в $(function () <. >); код.

    Источник

    функция jQuery click не работает после вызова ajax? [дубликат]

    этот вопрос уже есть ответ здесь:

    функция jQuery click отлично работает здесь

    но если я ставлю какой-нибудь по ajax, $(‘.deletelanguage’).click не работает.

    теперь $(‘.deletelanguage’).click за последние не работает.

    Примечание: CSS отлично работает здесь.

    Читайте также:  Как настроить notecam правильно

    Я хочу сделать эти Недавно добавленные работа с jQuery нажмите.

    7 ответов

    проблема в том, что .нажмите, работает только для элементов на странице. Вы должны использовать что-то вроде on Если вы проводите вверх по будущим элементам

    при использовании $(‘.deletelanguage’).click() чтобы зарегистрировать обработчик событий, он добавляет обработчик только к тем элементам, которые существуют в dom при выполнении кода

    вам нужно использовать обработчики событий на основе делегирования здесь

    поскольку класс добавляется динамически, вам нужно использовать делегация событие, чтобы зарегистрировать обработчик событий, таких как:

    Это прикрепит ваше событие к любым якорям в #LangTable элемент, уменьшение объема необходимости проверять все document дерево элементов и повышения эффективности.

    здесь скрипка

    тот же код, что и ваш, но он будет работать с динамически созданными элементами.

    событие click не существует в том месте, где определено событие. Вы можете использовать live или делегировать событие.

    Я тестировал простое решение, которое работает для меня! Мой javascript был в отдельном файле js. Я сделал то, что я поместил javascript для нового элемента в html, который был загружен ajax, и он отлично работает для меня! Это для тех, кто имеет большие файлы javascript!!

    Источник

    Событие Click не работает с динамически генерируемыми элементами

    Я пытался создать новый тег с именем класса test в

    , нажав кнопку. Я также определил событие click, связанное с test . Но событие не работает.

    Может ли кто-нибудь помочь?

    Используйте ‘on’, поскольку щелчок получает привязку к уже присутствующим элементам.

    Связывание click() , которое вы используете, называется «прямой» привязкой, которая привязывает обработчик только к уже существующим элементам. Он не будет привязан к элементам, созданным в будущем. Для этого вам нужно будет создать «делегированное» привязку с помощью on() .

    Делегированные события имеют то преимущество, что они могут обрабатывать события из элементов-потомков, которые будут добавлены в документ позже.

    Вышеупомянутое работает для тех, кто использует jQuery версии 1.7+. Если вы используете более старую версию, см. Предыдущий ответ ниже.

    Предыдущий ответ:

    Работал для меня. Пробовал его с помощью jsFiddle.

    Или есть новый способ общения с delegate() :

    Метод .on() позволяет вам делегировать любой желаемый обработчик событий:

    текущие элементы или будущих элементов, добавленных в DOM позднее.

    P.S: Не используйте .live() ! Из jQuery 1.7+ метод .live() устарел.

    Причина:

    Click() — прикрепляет обработчик событий только в том случае, если элемент уже существует в html-коде.

    Он не будет рассматривать новый элемент, который создается динамически (элемент Future) после загрузки страницы.

    Динамические элементы создаются с помощью javascript или jquery (не в html).

    Таким образом, событие click не срабатывает.

    Решение:

    Чтобы преодолеть это, мы должны использовать функцию on().

    функции delegate(), live() и on() имеют преимущества перед элементами DOM.

    on может запускать как существующие элементы, так и будущие элементы.

    on может рассматривать элементы, которые присутствуют на всей странице.

    Функции делегата(), live() устарели (не используйте их).

    Вы должны использовать функцию on, чтобы инициировать событие в динамически созданных (будущих) элементах.

    Удалите код из $(document).ready:

    Для этого вам нужно использовать . live:

    или если вы используете jquery 1.7+, используйте .:

    Попробуйте .live() или .delegate()

    Ваш .test элемент был добавлен после метода .click() , поэтому у него не было привязанного к нему события. Live и Delegate придают этому событию триггер родительским элементам, которые проверяют своих детей, поэтому все, что добавлено впоследствии, все еще работает. Я думаю, что Live проверит весь документ, а делегат может быть передан элементу, поэтому делегирование будет более эффективным.

    Добавить эту функцию в файл js. Он будет работать в каждом браузере

    Лучший способ применить событие к динамически сгенерированному контенту с помощью делегирования.

    поэтому ваш код будет таким же, как сейчас.

    Я нашел два решения в документации jQuery:

    Сначала: используйте делегат на теле или документе

    Ответ.. Прикрепите обработчик к одному или нескольким событиям для всех элементов, которые соответствуют селектору, сейчас или в будущем, на основе определенного набора корневых элементов.
    ссылка: http://api.jquery.com/delegate/

    Второе: поместите свою функцию в «$ (document)», используя «on» и присоедините ее к элементу, который вы хотите вызвать.
    Первым параметром является «обработчик событий», второй: элемент и третий: функция.
    Например:

    Ответ: Обработчики событий привязаны только к выбранным в данный момент элементам; они должны существовать на странице в момент, когда ваш код выполняет вызов .on(). Чтобы убедиться, что элементы присутствуют и могут быть выбраны, выполните привязку событий внутри обработчика документа для элементов, которые находятся в разметке HTML на странице. Если на страницу вводится новый HTML-код, выберите элементы и присоедините обработчики событий после того, как новый HTML будет помещен на страницу. Или используйте делегированные события для присоединения обработчика событий, как описано далее.
    ссылка: https://api.jquery.com/on/

    Читайте также:  У меня не работает 2 ядро что делать

    Проблема заключается в том, что вы пытаетесь связать класс «test» с событием, прежде чем что-либо с классом «test» в DOM . Хотя может показаться, что все это динамично, на самом деле происходит то, что JQuery делает проход через DOM и прокручивает событие click при запуске функции ready() , что происходит до того, как вы создали «Click Me», в событии кнопки.

    Добавив событие «test» Click к обработчику кликов «button», он подключится к нему после того, как правильный элемент существует в DOM .

    Использование live() (как указывали другие) — это еще один способ сделать это, но я также подумал, что было бы неплохо указать на незначительную ошибку в вашем JS-коде. То, что вы написали, было не так, просто нужно было быть правильно охвачено. Понимание того, как работают DOM и JS, — это одна из сложнейших вещей, которые многие традиционные разработчики обворачивают вокруг.

    live() — это более чистый способ справиться с этим, и в большинстве случаев это правильный путь. По сути, он наблюдает за DOM и переустанавливает все, когда элементы внутри него меняются.

    Источник

    Событие 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», поскольку щелчок получает привязку к уже присутствующим элементам.

    Источник

  • Оцените статью