【问题标题】:on() vs live() click function on element that doesn't exist yet [duplicate]on() vs live() 在尚不存在的元素上单击功能[重复]
【发布时间】:2013-02-26 15:12:35
【问题描述】:

据我所知,click() 方法对我不起作用,因为我单击的元素在页面加载时不存在(DOM 就绪)。

我找到了很多建议使用.live('click',function(){...}) 的答案。这很好用!

但是,.live() 自 jQuery 1.7 起已弃用

所以,我尝试改用.on('click',function(){...}),但它不起作用(与.click() 相同。

有谁知道为什么,或者我可以做些什么来使用.on(),类似于.live()(哪个有效)?

【问题讨论】:

  • @wrschneider99 确实如此!

标签: jquery onclick onclicklistener


【解决方案1】:

由于on() 替换了bind()live(),您需要传递第三个参数才能使用事件委托(换句话说,使其像旧的live() 一样工作):

$('#container').on('click', '.element', function(){ });

【讨论】:

  • 谢谢,如果 #container.element 是同一个元素呢?我尝试在两个地方使用相同的元素,但没有运气:/
  • @iight 然后就不行了。 #container 不能动态生成。正如 j08691 所说,选择一个尽可能靠近动态添加元素的包装元素以提高性能。
  • 必须是父元素,对吧?
  • @iight 正确。非动态生成的父元素,并且在 DOM 中尽可能靠近。
  • @iight Np,很高兴为您提供帮助!
【解决方案2】:

你应该可以使用这样的格式:

$(document).on('click','element', function(){...});

其中element 是您要将点击事件绑定到的元素。使用document 是一种最坏的情况,因为理想情况下,您希望使用加载 DOM 时存在的元素,该元素在 DOM 层次结构中更接近将被动态加载的元素。

来自 jQuery .on() 文档:

事件处理程序仅绑定到当前选定的元素;他们 在您的代码调用 .on() 时必须存在于页面上。 为了确保元素存在并且可以被选择,执行事件 绑定在文档就绪处理程序中的元素 页面上的 HTML 标记。如果新的 HTML 被注入到页面中, 在新的 HTML 之后选择元素并附加事件处理程序 放入页面中。

【讨论】:

  • 谢谢!这行得通,但现在我只需要研究整个 $(document) 绑定。不过,这确实解决了问题!
猜你喜欢
  • 2014-02-24
  • 2013-09-22
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多