相关疑难解决方法(0)

在jQuery中,如何将事件附加到动态html元素?

假设我有一些jQuery代码,它将事件处理程序附加到具有类"myclass"的所有元素.例如:

$(function(){
    $(".myclass").click( function() {
        // do something
    });
});
Run Code Online (Sandbox Code Playgroud)

我的HTML可能如下:

<a class="myclass" href="#">test1</a>
<a class="myclass" href="#">test2</a>
<a class="myclass" href="#">test3</a>
Run Code Online (Sandbox Code Playgroud)

这没有问题.但是,请考虑是否在将来某个时间将"myclass"元素写入页面.

例如:

<a id="anchor1" href="#">create link dynamically</a>
<script type="text/javascript">
$(function(){
    $("#anchor1").click( function() {
        $("#anchor1").append('<a class="myclass" href="#">test4</a>');
    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当用户点击#anchor1时会创建"test4"链接.

"test4"链接没有与之关联的click()处理程序,即使它具有class ="myclass".

知道如何解决这个问题吗?

基本上,我想编写一次click()处理程序,并将其应用于页面加载时出现的内容和稍后通过Ajax/DHTML引入的内容.

javascript jquery events dhtml

520
推荐指数
5
解决办法
47万
查看次数

是应该将所有jquery事件绑定到$(文档)?

这是来自哪里

当我第一次学习jQuery时,我通常会附加这样的事件:

$('.my-widget a').click(function() {
    $(this).toggleClass('active');
});
Run Code Online (Sandbox Code Playgroud)

在了解了有关选择器速度和事件委托的更多信息之后,我在几个地方读到"jQuery事件委托将使您的代码更快".所以我开始编写这样的代码:

$('.my-widget').on('click','a',function() {
    $(this).toggleClass('active');
});
Run Code Online (Sandbox Code Playgroud)

这也是复制已弃用的.live()事件行为的推荐方法.这对我很重要,因为我的很多网站都在动态添加/删除小部件.上面的行为与.live()的行为完全不同,因为只有添加到现有容器".my-widget"的元素才会获得行为.如果我在代码运行后动态添加另一个html块,那么这些元素将不会获取绑定到它们的事件.像这样:

setTimeout(function() {
    $('body').append('<div class="my-widget"><a>Click does nothing</a></div>');
}, 1000);
Run Code Online (Sandbox Code Playgroud)


我想要实现的目标:

  1. .live()的旧行为//意味着将事件附加到尚未存在的元素
  2. .on()的好处
  3. 绑定事件的最快性能
  4. 管理事件的简单方法

我现在附上所有这样的事件:

$(document).on('click.my-widget-namespace', '.my-widget a', function() {
    $(this).toggleClass('active');
});
Run Code Online (Sandbox Code Playgroud)

这似乎符合我的所有目标.(是的,因为某种原因它在IE中速度较慢,不知道为什么?)它很快,因为只有一个事件与单个元素相关联,而二级选择器仅在事件发生时进行评估(如果这里错误,请纠正我).命名空间非常棒,因为它可以更容易地切换事件监听器.

我的解决方案/问题

所以我开始认为jQuery事件应该始终绑定到$(document).
你有什么理由不想这样做吗?
这可算是最佳做法吗?如果没有,为什么?

如果您已经阅读了这一切,谢谢.我感谢任何/所有反馈/见解.

假设:

  1. 使用支持.on()//至少1.7版的jQuery
  2. 您希望将事件添加到动态添加的内容中

读数/例子:

  1. http://24ways.org/2011/your-jquery-now-with-less-suck
  2. http://brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery
  3. http://www.jasonbuckboyer.com/playground/speed/speed.html
  4. http://api.jquery.com/on/

javascript jquery jquery-selectors jquery-on

157
推荐指数
2
解决办法
3万
查看次数

标签 统计

javascript ×2

jquery ×2

dhtml ×1

events ×1

jquery-on ×1

jquery-selectors ×1