0

我有一个 jQuery 函数,它为从 API 返回的每个搜索结果在表中添加一行。每行都包含一个链接按钮,该按钮被赋予类“js-run-apn-button”。

单击链接时,它应该触发函数 apnData,但它无法触发。我很确定这是因为在第一次加载 dom 之后添加了链接类,因此事件无法绑定。我可以通过在创建新类的函数中而不是在 $document.ready() 函数中添加事件处理程序来解决这个特定问题,但这会使程序复杂化。所以我想知道是否有其他方法可以解决这个问题,更广泛地说,一般来说处理这个问题的最佳方法是什么。

$(document).ready(function() {
    $('.js-run-apn-button').on('click', apnData);
    ...
}

function multipleResults(response) {
    $('.result-table > tbody').append('<tr><td><a class="button blueButton js-run-apn-button" href="#">Search APN</a></td></tr>');
    ...
}
4

2 回答 2

0

使用.on()

您必须为动态生成的元素正确处理事件委托。您必须使用如下语法。

$('document').on('click','.js-run-apn-button', apnData);

注意:不要document用于性能问题。使用最近的父级,它是静态的,并且始终存在于 DOM 中。

对于 1.7 和更旧的 jquery 版本,请使用.live()。语法如下。

$(".js-run-apn-button").live("click", apnData);

这在 1.7 中已弃用并在 1.9 中删除

于 2013-10-31T23:51:32.247 回答
0

您必须使用.on函数或.live函数(如果您使用较旧的 jquery 版本 < 1.7,则为 .live)。

$(document).on('click', '.js-run-apn-button', function(event){

or

$(".js-run-apn-button").live("click", function(event){ 
于 2013-10-31T23:52:09.620 回答