0

我正在 asp.net 中开发讨论面板,其中我正在通过 javascripts 绘制一些跨度

$("#commenttr").after("<tr id="+i+"><td class=\"labelPortion\"></td><td class=\"controlPortion\">" +out[i]+ "</td><td><span style = \"cursor:pointer\" class = \"plblAgreeComment\" id = \"" + ids[i+1] + "\"> Vote Up </span> <span style = \"cursor:pointer\" class = \"plblDisAgreeComment\" id = \"" + ids[i+1] +"\">Vote Down </span><span id = \"ptxtAgreeComment\" >"+ agrees[i+1] + " </span></td></tr>");

但是当我调用 jquery 函数时

$(".plblAgreeComment").click(function(){
    alert("hi");
}

它不工作。请帮我。

4

5 回答 5

3

描述

您需要 jQuery.live().on()方法将事件绑定到动态创建的 html。

选择.live().on()取决于您使用的 jQuery 版本。

.live()从 jQuery 1.3 开始可用。为现在和将来匹配当前选择器的所有元素附加一个事件处理程序。

.on()从 jQuery 1.7 开始可用。将一个或多个事件的事件处理函数附加到选定元素。

样本

$(".plblAgreeComment").live('click', function(){
     alert("hi");
});

$(".plblAgreeComment").on('click', function(){
     alert("hi");
});

更多信息

更新:jsFiddle 演示

于 2012-04-16T18:37:16.537 回答
2

使用 jQuery on,因为您将这些项目动态添加到 DOM

 $(function(){
    $("body").on("click",".plblAgreeComment",click(function(){
            alert("hi");
    });
  });

on将适用于当前元素和未来元素。

http://api.jquery.com/on/

on从 jQuery 1.7 开始可用,如果你使用的是旧版本的 jQuery,你应该检查live http://api.jquery.com/live/

于 2012-04-16T18:38:11.827 回答
0

尝试使用.on以下语法,

$(document).on('click', '.plblAgreeComment', function(){
    alert("hi");
});

在上面的代码中,使用表格选择器而不是文档选择器。

于 2012-04-16T18:38:35.763 回答
0

两件事.. 为您的行生成 html 时,您可能在类名中有一个额外的字符。

class = \"plblAgreeCom 

也许应该是:

class =\"plblAgreeCom 

或者您在修改 DOM 之前附加点击处理程序,在这种情况下:

 $(".plblAgreeComment").click(function(){
        alert("hi");
}

应该:

 $(".plblAgreeComment").live("click", function(){
        alert("hi");
}
于 2012-04-16T18:40:17.353 回答
0

如果要将事件绑定到动态注入的 DOM 元素,则需要使用该on方法,以便将任何新元素绑定到该事件侦听器:

 $(".plblAgreeComment").on("click", function(){
    alert("hi");
 }

注意:还有其他方法,例如live()可以达到类似效果的方法,但它们已被弃用,取而代之的是on,它可以处理每种情况下的这种情况。

于 2012-04-16T18:42:33.497 回答