gpt4 book ai didi

javascript - 为什么这会在 jQuery 1.7.x 中中断?

转载 作者:搜寻专家 更新时间:2023-11-01 05:02:11 24 4
gpt4 key购买 nike

以下代码片段显示了我的问题所在:

var $div = $('<div>');

$('span').live('click', function() { this.innerHTML = 'changed'; });

$div.append(
$('<span>span</span>').click()
);

$div.appendTo('body');

这在 jQuery 中按预期工作 1.6.x但不在1.7.x

为什么它在 1.7.x 中不起作用?这是一个错误吗?有什么办法让它在 1.7.x 中工作吗?

编辑:.on doesn't change anything!!

最佳答案

事件处理的工作方式在 1.7 版本中发生了变化。在 <span> 之前被添加到 DOM,在其上触发的事件不会冒泡到 <body>正如他们曾经所做的那样(我认为这是错误的;1.7 的行为更有意义)。

<span> 上触发事件可能有效,但因为事件不会冒泡到 <body>处理您的 .live() 的实际处理程序无法调用设置。

edit — 它可能是事件冒泡到的文档元素;不管怎样,重点是一样的。

再次编辑 — 这是一种使这项工作起作用的方法,以便您可以在将元素添加到 DOM 之前触发处理程序:

$('<div></div>').on('click', 'span', function() {
this.innerHTML = "Changed!";
}).append($('<span>span</span>'))
.find('span').click().end()
.appendTo($('body'));

在新生的 <div> 上将“点击”处理程序设置为委托(delegate)处理程序直接。然后,在附加新的 <span> 之后对于该元素,然后可能触发对该 <span> 的“点击”并调用处理程序。这发生在整个事情被附加到 <body> 之前.

关于javascript - 为什么这会在 jQuery 1.7.x 中中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9634639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com