我正在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");
}
它不起作用。请帮帮我。
答案 0 :(得分:3)
您需要jQuery .live()
或.on()
方法将事件绑定到动态创建的html。
根据您使用的jQuery版本,选择.live()
或.on()
。
.live()自jQuery 1.3起可用。为现在和将来与当前选择器匹配的所有元素附加事件处理程序。
.on()自jQuery 1.7起可用。将一个或多个事件的事件处理函数附加到所选元素。
$(".plblAgreeComment").live('click', function(){
alert("hi");
});
$(".plblAgreeComment").on('click', function(){
alert("hi");
});
答案 1 :(得分:2)
使用jQuery on
,因为您要动态地将这些项添加到DOM
$(function(){
$("body").on("click",".plblAgreeComment",click(function(){
alert("hi");
});
});
on
适用于当前元素和未来元素。
on
可从jQuery 1.7开始使用,如果您使用的是旧版jQuery,则应检查live
http://api.jquery.com/live/
答案 2 :(得分:0)
尝试使用以下语法中的.on
$(document).on('click', '.plblAgreeComment', function(){
alert("hi");
});
在上面的代码中,使用表格选择器而不是文档选择。
答案 3 :(得分:0)
两件事......在为你的行生成html时,你可能在类名中有一个额外的字符。
class = \"plblAgreeCom
也许应该是:
class =\"plblAgreeCom
或者您在修改DOM之前附加了点击处理程序,在这种情况下:
$(".plblAgreeComment").click(function(){
alert("hi");
}
应该是:
$(".plblAgreeComment").live("click", function(){
alert("hi");
}
答案 4 :(得分:0)
如果要将事件绑定到动态注入的DOM元素,则需要使用on
方法,以便将任何新元素绑定到该事件侦听器:
$(".plblAgreeComment").on("click", function(){
alert("hi");
}
注意:还有其他方法,例如live()
会产生类似的效果,但是它们被弃用而不是on
,它会针对每种情况处理这种情况。