我正在使用WinJS构建Windows 8.1 Store应用程序。当用户查询某些搜索结果时,会显示在<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);
没有成功。
为什么会发生这种情况?
答案 0 :(得分:3)
在您尝试安装事件处理程序(动态内容的常见问题)后,我猜您正在创建<p class="searchresults">content</p>
对象。这不适用于正常的事件处理,因为当您尝试向其添加事件处理程序时,DOM对象不存在。
如果是这种情况,那么您需要使用委托事件处理,如下所示:
$(document.body).on('click', '.searchresults', function() {
console.log("clicked");
});
这将允许您随时动态创建搜索结果内容,并且事件处理程序仍将通过事件委派(事件传播到其父项)来触发。
您没有在搜索结果内容周围显示HTML,但最佳方法是为搜索结果选择最接近的静态父级(父级不是动态创建的,当时您已存在附加事件处理程序)并将事件附加到:
$(closest static parent selector).on('click', '.searchresults', function() {
console.log("clicked");
});