Javascript stoppropagation不能与ajax .load一起工作
javascript stoppropagation doesn't work with ajax .load
我使用.stopPropagataion()
在点击<a>
标签时停止<li class="article">
中的冒泡。
$(document).ready(function(){
$(".article a").click(function(e) {
e.stopPropagation();
});
});
与此HTML:
<li class="article" onlick="javascript:somefunction();">
<div id="div_id">
<a>Some link</a>
</div>
</li>
一切工作正常,但随后我使用$('#div_id').load("div_html.html")
动态加载一些内容到div。现在我的.stopPropagation()
不能阻止冒泡。为什么它不工作了?
问题是,当您更新div
的内容时,您销毁了其中的所有元素(包括附加到它们的任何事件处理程序)。当您的代码运行时,您的代码将click
事件挂接到div
中的a
元素上;div
中的新a
元素将不会被连接。
在您的情况下,您最好使用delegate
(实际示例,使用load
):
$(document).ready(function(){
$(".article div").delegate("a", "click", function(e) {
e.stopPropagation();
});
});
将click
钩在div
上。当点击发生时,它从链接弹出到div
,由jQuery创建的点击处理程序检查它,看看它是否实际上是对任何a
元素的点击。如果是,则停止点击。
从jQuery 1.7开始,新的推荐语法是on
:
$(document).ready(function(){
$(".article div").on("click", "a", function(e) {
e.stopPropagation();
});
});
注意参数的顺序与delegate
不同,但除此之外,它做的事情是一样的。
我建议避免将旧风格的DOM0处理程序(事件处理程序属性)与新风格的DOM2代码(您的处理程序附加了jQuery)相结合。在许多浏览器中,这两种机制在某种程度上是分开的,可能无法像您希望的那样很好地发挥作用。
关于这一点还有两个注释:
onlick="javascript:somefunction();"
- 是
onclick
,不是onlick
(你错过了c
) - 你不使用
javascript:
伪协议的事件处理程序属性,只有href
s。把那部分去掉。(为什么它不会导致错误?因为纯属巧合是有效的。你正在定义一个你永远不会使用的标签。)
相关文章:
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- 转义符不能与innerHTML一起使用
- 高亮显示与数组字符串一起使用时文本插件中断
- setTimeout可以与闭包内的函数一起使用吗
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- Highcharts colorsByPoint与系列中的线性渐变一起使用时不起作用
- 如何将js库与typescript一起使用
- jQuery点击ON现在使用.load触发关闭
- 将webpack和babel与父项目目录中的文件一起使用
- .load()函数赢得't加载javascript
- 使用jquery.load('pageName')方法时,未从应用程序缓存加载Html页
- 将 Drag&Drop 与 jsTree 和 DataTables 一起使用
- Javascript-如何让脚本与Ajax请求的数据一起运行
- 使用.load()后在Lightbox中插入谷歌地图
- jQuery load() 不能与语法突出显示器一起使用
- Jquery load()和colorbox()组合在一起
- Javascript stoppropagation不能与ajax .load一起工作
- JQUERY .load不能与窗口一起工作.firefox中的位置
- 两个相同的.load()don'我不能一起工作
- 如何将.load()与flex滑块一起使用