Я создаю приложение 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);
Безуспешно.
Есть идеи, почему это происходит?
Я предполагаю, что вы создаете объект <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");
});