这是index.html
:
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('.btn_test').click(function() { alert('test'); });
});
function add(){
$('body').append('<a href=\'javascript:;\' class=\'btn_test\'>test</a>');
}
</script>
</head>
<body>
<a href="javascript:;" class="btn_test">test1</a>
<a href="javascript:;" onclick="add()">add</a>
</body>
如果我点击test1
链接,则会显示alert('test')
,但如果我点击add
链接,则点击test
,它不会显示任何内容。< / p>
你能解释一下吗?
答案 0 :(得分:210)
对于在2011年之后提出此问题的用户,有一种新的正确方法:
$(document).on('click', '.btn_test', function() { alert('test'); });
这是jQuery 1.7。
有关详细信息,请参阅Direct and delegated events
答案 1 :(得分:34)
您需要使用“实时”点击监听器,因为最初只存在单个元素。
$('.btn_test').live("click", function() {
alert('test');
});
更新:由于不推荐使用直播,您应该使用“on()”:
$(".btn_test").on("click", function(){
alert("test");
});
答案 2 :(得分:15)
我有同样的问题,就像问题我只是拉着我的头发,然后我得到了解决方案。 我使用的是不同的语法
$(".innerImage").on("click", function(){
alert("test");
});
它不适合我(innerImage是动态创建的dom) 现在我正在使用
$(document).on('click', '.innerImage', function() { alert('test'); });
感谢@Moshe Katz
答案 3 :(得分:8)
.click绑定到jQuery目前可见的内容。你需要使用.live:
$('.btn_test').live('click', function() { alert('test'); });
答案 4 :(得分:7)
使用Jquery live 代替。以下是http://api.jquery.com/live/
的帮助页面$('.btn_test').live(function() { alert('test'); });
修改:live()
已弃用,您应该使用on()
代替。
$(".btn_test").on("click", function(){
alert("test");
});
答案 5 :(得分:3)
这是因为click事件仅绑定到绑定时的现有元素。您需要使用live或delegate,它将事件绑定到页面上的现有和未来元素。
$('.btn_test').live("click", function() { alert('test'); });
答案 6 :(得分:2)
您需要live listener而不是点击:
$('.btn_test').live('click', function() {
alert('test');
});
原因是click
仅在加载页面时将侦听器分配给元素。添加的任何新元素都不会有这个侦听器。 Live会在页面加载时以及之后添加时将click侦听器添加到元素
答案 7 :(得分:1)
当文档加载时,您将向每个匹配的类添加事件侦听器以侦听这些元素上的click事件。同一个侦听器不会自动添加到稍后添加到Dom的元素中。
答案 8 :(得分:1)
因为事件与文档中的每个匹配元素相关联。添加的任何新元素都不会自动将相同的事件绑定到它们。
在添加事件后,您必须手动将事件绑定到任何新元素,或者使用实时侦听器。
答案 9 :(得分:1)
$('.btn_test').click
将为页面上可用的元素添加处理程序(此时'test'不存在!)
您必须在追加时手动为此元素添加点击处理程序,或使用live
事件处理程序,即使您稍后创建它也适用于每个元素。
$('.btn_test').live(function() { alert('test'); });
答案 10 :(得分:1)
在jquery 1.7之后可以使用方法,它真的很好用
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("p").on("click",function(){
alert("The paragraph was clicked.");
$("body").append("<p id='new'>Now click on this paragraph</p>");
});
$(document).on("click","#new",function(){
alert("On really works.");
});
});
</script>
</head>
<body>
<p>Click this paragraph.</p>
</body>
</html>
答案 11 :(得分:0)
或者只是在页面末尾运行脚本
答案 12 :(得分:0)
您需要添加适当的按钮单击功能才能获得正确的结果
$("#btn1").live(function() { alert("test"); });