【问题标题】:jQuery live() - alert() works but not addClassjQuery live() - alert() 有效但 addClass 无效
【发布时间】:2018-02-27 19:44:08
【问题描述】:

此代码适用于 jQuery 1.7.2:

    $('.category').live('click', function() {
        alert('clicked');
    });

但是当我切换到使用addClass时,没有添加任何类:

    $('.category').live('click', function() {
        $(this).addClass('active');
    });

谁能建议为什么以及如何使用 live() 来做到这一点?谢谢。


更新: 我切换到 2.2.4 版本的 jquery 并将 live() 函数更改为 on() 函数。当我针对动态创建的链接或非动态创建的 DOM 元素时,警报会起作用。但是,addClass() 仅在我针对*非动态创建的元素时才有效,并且检查器显示为这些元素添加了活动类,但未添加到动态创建的链接中。

【问题讨论】:

  • 当你可以使用on时,使用live的目的是什么?
  • live() 在 1.9 之前的版本被删除时就像代表一样。
  • 我觉得这应该给你更多的洞察力:stackoverflow.com/questions/8752321/…

标签: jquery click live


【解决方案1】:

在 MDN 文档中引用:

从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 来 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 优先于 .live()。

由于该方法已被弃用,因此它的功能在某些情况下可能会被破坏。您应该使用.on 将任何事件绑定到元素。

$('.category').on('click', function() {
  $(this).addClass('active');
});
.active{
  background-color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<div class="category">Some Content</div>

【讨论】:

  • 我将 jquery 切换到 2.2.4,并为 on() 切换了 live() 函数。警报仍然有效,但无论出于何种原因,它都不会执行 addClass。啊!
  • @jamie 你怎么确定没有添加课程?你检查过元素吗?你的课有一些 CSS 样式吗?
  • 是的,我检查了元素并没有添加任何类。我通过将 .category 更改为未动态添加的父类来测试它,并添加了“活动”类(显示在检查器中)。
  • @jamie 你能在某处上传你的代码截图并在此处评论链接吗?
  • 这是有效的代码: $('.textwidth').on('click', function() { $(this).addClass('active'); }); // 唯一不同的是,如果我放一个动态生成的dom元素,就不添加类了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多