Событие клика не срабатывает на элементе

0

Я создаю приложение Windows 8.1 Store с помощью WinJS. Когда пользователь запрашивает некоторые результаты поиска, отображается в <p class="searchresults">content</p>.

Я хотел бы добавить обработчик события в класс .searchresults. Я сделал следующее:

$('.searchresults').on('click', function() {
console.log("clicked");
});

Я пробовал даже без .on()

$('.searchresults').click(function() {
console.log("clicked");
});

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

Я попытался добавить обработчик событий через способ WinJS:

Microsoft.Maps.Events.addHandler(document.getElementsByClassName("searchresults"), 'click', myfunc);

Безуспешно.

Есть идеи, почему это происходит?

Теги:
windows-8.1
windows-8
winjs

1 ответ

3
Лучший ответ

Я предполагаю, что вы создаете объект <p class="searchresults">content</p> ПОСЛЕ того, как вы пытаетесь установить обработчик событий (общая проблема с динамическим контентом). Это не будет работать с нормальной обработкой событий, потому что объект DOM не существует, когда вы пытаетесь добавить к нему обработчик событий.

Если это так, то вам необходимо использовать делегированное управление событиями следующим образом:

$(document.body).on('click', '.searchresults', function() {
    console.log("clicked");
});

Это позволит вам динамически создавать контент searchresults в любое время, и обработчик событий будет по-прежнему запускаться через делегирование событий (события распространяются до их родителей).


Вы не показывали HTML вокруг содержимого результатов поиска, но наиболее оптимальным способом сделать это является выбор ближайшего статического родителя к результатам поиска (родитель, который не динамически создан и уже существует в момент присоединения события обработчик) и присоединить событие к этому:

$(closest static parent selector).on('click', '.searchresults', function() {
    console.log("clicked");
});
  • 0
    Работает отлично, большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню