0

我正在使用 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);

没有成功。

任何想法为什么会发生这种情况?

4

1 回答 1

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");
});
于 2013-10-24T23:30:31.823 回答