delegate和动态内容
jquery .delegate and dynamic content
我必须遵循以下HTML:
<ul class="ulclass">
<li class="liclass">
...some more nesting
<a href="somelink">somelink</a>
....close nesting
</li>
<li class="liclass">
...
</ul>
在类"liclass"的每个li上都有一个单击事件,所以我用(大概<div>
在.liclass内部)来阻止锚的冒泡:
$(".liclass div").delegate("a", "click", function(e) {
e.stopPropagation();
});
现在我添加更多的<li class="liclass">
与Ajax .load。stopPropagation适用于static。但不适合动态添加。假设加载页面时<ul class="ulclass">
的代码在那里。你能让我知道如何改变。委托,以停止冒泡为动态添加。liclass。
将另一个委托处理程序放置在包含动态创建的元素(在本例中为ul
)的任何元素上,以停止传播。
$("ul.ulclass").delegate(".liclass div", "click", function(e) {
e.stopPropagation();
});
$("ul.ulclass").delegate(".liclass", "click", function(e) {
// main code for each li element
});
因为它们都是同一元素上的委托方法,所以即使事件已经冒泡,e.stopPropagation()
也应该阻止处理程序。
更新了演示,以显示它可以与动态元素一起工作
另一种选择是简单地将处理程序直接绑定到动态创建的div
元素。
因此,如果您使用.load()
,我假设您正在清除旧内容并用新内容替换它。在这种情况下,在回调中,只需选择div,并重新绑定处理程序。
$("ul.ulclass").load('/whatever/', function() {
// shortcut to binding a handler with stopPropagation and preventDefault
$(this).find('li.liclass div').bind('click', false);
});
您需要在每个ajax请求完成后调用".delegate"才能使其工作
如果你使用的是最新版本的jQuery,正确的代码应该是:
$(document).on("click", ".liclass a", function(e) {
e.stopPropagation();
});
事件委托的意思是:事件已经冒泡到一个"更高级别"的元素。不可能再停止对该元素的传播(因为它已经发生了)。只有在层次结构中更高的元素才能停止传播。如果你已经将委托绑定到"document",它将根本不起作用。
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 动态分配GA增强型电子商务跟踪器
- onkeyup无法动态创建多个文本区域
- 使用javascript将动态表从一个html页面打印到另一个html页
- 如何使Javascript动态html表及其上的事件
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 如何使用javascript从主svg对象动态创建svg视图框
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- 如何在Google柱状图中动态添加行/列
- 困在逻辑中试图定位动态的东西
- 在动态创建的元素上获取对特定选择器的引用
- 如何动态插入jquery代码
- 使用Google Visualization动态调用构造函数
- 使用jQuery动态添加表并在其中动态添加行
- delegate和动态内容
- jQuery在.keypress()和.delegate()之后从动态创建的内容中获取值
- 对动态添加的容器使用delegate()