2014-10-03 3 views
0

В моем приложении 4 rails У меня возникли проблемы с запуском события ajax «success» для ссылок, которые динамически добавляются в страницу с помощью jquery. Я создаю разметку следующим образом и динамически добавляю ее на страницу.событие ajax success не запускается для динамически добавленных ссылок

<a data-confirm="Are you sure?" data-method="delete" data-remote="true" href="/mylink" rel="nofollow">delete</a> 

Следующая ДЕЛАЕТ спускового:

$(document).on("ajax:success"

Но версия, которая не вызывает, и один я хочу использовать это:

$("a[data-remote]").on("ajax:success"

Любая идея, почему $(document) версия работает, а версия $("a[data-remote]") нет? Чтобы уточнить, это не работает специально, когда вещи добавляются динамически. Для ссылок, которые уже находятся на странице, они запускают события просто отлично.

Примечание: Turbolinks удален.

+2

Это потому, что обработчик события .on() не обрабатывает динамически добавленные элементы, если вы не укажете его так: «$ (document) .on (« ajax: success »,« a [data-remote] », функция() {});». Он работает с «$ (document)», потому что обработчик события захватывает событие, когда он пузырится до документа, [здесь больше о пузырях и захвате событий] (http://www.smashingmagazine.com/2013/11/12/an -внедрение к РОМ события /). Вы можете добавить обработчик события к родительскому элементу, который содержит все «a [подтверждение данных]», поэтому он не фильтрует каждое событие. – Deviljho

+0

@ AdriánSalgado, вы хотите поместить свой комментарий в ответ, чтобы я мог принять и дать вам баллы? – Dty

ответ

0

Это потому, что обработчик события .он() не обрабатывает динамически добавленные элементы, если не указано так:

$(document).on('ajax:success', 'a[data-remote]', function(){});". 

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

Вы должны добавить обработчик событий к родительскому элементу, который содержит все «a [подтверждение данных]», чтобы он не отфильтровывал каждое событие, или вы не могли указать, как приведенный выше код.

Here's more on event bubbling and capturing.

Смежные вопросы