jQuery - 如何将事件绑定到稍后将显示的隐藏元素?

Nic*_*ick 50 jquery

我试图将'click'事件附加到特定类的所有元素.问题是某些元素位于绑定事件时隐藏的选项卡(display:none)上.(.bind()).似乎当显示这些元素时,事件不再受约束.

$('a.someClass').bind('click', function(){
  alert("test");
});
Run Code Online (Sandbox Code Playgroud)

隐藏的元素似乎没有绑定点击事件.如果我选择隐藏的元素:

$('a.someClass:hidden').bind('click', function(){
  alert("test");
});
Run Code Online (Sandbox Code Playgroud)

当这些元素不再被隐藏时,似乎没有绑定click事件.有没有人经历过这个?有没有办法将元素绑定到事件,而不管它们的显示属性如何?

谢谢

Max*_*air 58

从jQuery 1.7开始,该.live()方法已被弃用.

您现在可以使用该.on()方法.通过将委托事件附加到运行jQuery时可在HTML中查看的元素.

因此,如果a.someClass在运行jQuery时隐藏,则应将委托事件附加到正文,因此将a.someClass在未来存在可查看元素时运行,例如:

$('body').on('click','input.a.someClass',function(){
  alert("test");
});
Run Code Online (Sandbox Code Playgroud)

  • 假设您调用的模板在页面上呈现最初隐藏的HTML块,并且该块具有一些内联javascript(对于自身),上面的代码不会被触发,因为它位于该隐藏元素中.是否有解决方案,以便内联JavaScript也会被触发? (3认同)

Dam*_*amb 13

编辑2年后:有些人指出,该Live功能现已弃用(您也可以在链接文档页面的顶部看到).当前版本的正确事件处理程序名称将是On.请参阅Maxim的答案以获得一个好例子.

原始答案:
您是否尝试过使用Live()

.live('click',function(){/* code */});
Run Code Online (Sandbox Code Playgroud)

版本说明:live已在jQuery 1.7中弃用,并在jQuery 1.9中删除.这个答案只适用于比jQuery 1.7更早的jQuery版本

  • .live现已弃用,请使用.on或.delegate api.jquery.com/live (2认同)

Ady*_*gom 7

使用委托(注意这是在你取消隐藏之后):

$('body').delegate('.someClass', 'click', function (evt) {
    // do something here
});
Run Code Online (Sandbox Code Playgroud)