说我的页面中有这个代码:
<script language="javascript">
$(document).ready(function() {
$(".test").click(function() {
alert('Hello');
});
});
</script>
为什么之前的代码不适用于具有类“test”的元素,我稍后会将其添加到文档中,例如:
$('body').append('<p class="test">Test</p>');
因为当我点击之前的<p>
标签时会发生什么事情。
另外,如果我有这个:
<div id="first">Edit me.<div id="second">Save me.</div></div>
我可以做文字描述的内容吗?也就是说,控制#first
div的内容而不影响#second
div的内容?
谢谢。
答案 0 :(得分:8)
问题是.click()
仅对执行方法时DOM中可用的元素应用侦听器。你应该看一下.on()
。
使用.on()
,您可以委托事件,例如:
$("body").on("click", ".test", function() {
alert('Hello');
});
现在,您身体中可用的类test
的任何元素(当前和未来)都会有一个点击事件监听器。
答案 1 :(得分:3)
live从1.7开始弃用,
使用答案 2 :(得分:2)
尝试使用on()侦听器:
$(document).on("click",".test", function() {
alert('Hello');
});
答案 3 :(得分:1)
将事件绑定到元素时,它们只绑定到已创建的元素。所以你需要在新元素上再次运行'bind'命令。
或者,您可以使用on('click')
将事件绑定到现有元素和所有未来元素。
答案 4 :(得分:0)
因为在您附加事件处理程序时,该对象尚不存在。你不能订阅不存在的元素。 您可以使用Live方法。
http://api.jquery.com/live/
似乎已经弃用了(感谢@Anthony Grist)。使用On或委托()代替。
http://api.jquery.com/delegate/
$('div').on('click', function()
{
//Do something
});
答案 5 :(得分:-1)
您应该使用“on”将事件与解释脚本后添加的元素绑定。
$(document).on("click", selector, function(e){
//do something
});
答案 6 :(得分:-2)
如果您需要将点击应用于以后添加的标签,则应使用 live
$(document).on('click','.test',function() { });
编辑:@Anthony你是对的。 live已被弃用。更新了代码