后来插入的标签,JQuery没有看到

时间:2012-04-03 09:29:50

标签: javascript jquery html

说我的页面中有这个代码:

<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的内容?

谢谢。

7 个答案:

答案 0 :(得分:8)

问题是.click()仅对执行方法时DOM中可用的元素应用侦听器。你应该看一下.on()

使用.on(),您可以委托事件,例如:

$("body").on("click", ".test", function() {
   alert('Hello');
});

现在,您身体中可用的类test的任何元素(当前和未来)都会有一个点击事件监听器。

答案 1 :(得分:3)

live从1.7开始弃用,

使用

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

答案 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/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已被弃用。更新了代码