点击事件不会触发元素

时间:2013-10-24 23:16:18

标签: javascript jquery windows-8 winjs windows-8.1

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

没有成功。

为什么会发生这种情况?

1 个答案:

答案 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");
});