情况:我正在提供一个通用的jQuery插件,用于加载用户通过AJAX动态指定的div.一切正常,但在例如一个用户的页面,有一块未被调用的JS,因为“ready”事件没有被激活.
通常情况是用户的其他jQuery内容将放在jQuery(document).ready之后.
我刚刚测试过:
$(document).trigger('ready');
手动 – 它完全没有效果,因为我认为“就绪”只被调用一次而且只被调用一次.
我喜欢做这个帖子中建议的事情:
Trigger $document.ready (so AJAX code I can’t modify is executed)
但我认为readyList现在是私有的,不能再被直接操作了?
值得一提的是,我提供的插件为用户提供了回调功能.当然,他可以在那里放置后加载处理JS代码.
在此先感谢并亲切的问候
解决方法
您可以通过在完成ajax调用后取出需要运行的代码来避免这种情况,并且可能是您希望从您希望重新初始化的事件中受益的元素的填充.
$(document).ready(function() { initialise(); //... Resume with DOM ready }); function initialise() { // create event here that needs re-initialising }
因此,当您完成ajax调用后,只需再次调用initialise().
或者看看使用.on并使用它的冒泡功能,这就是我将如何处理这类问题.它避免了您不得不考虑在脚本中“重新初始化”DOM ready函数的任何部分.
补充评论
.on允许您将事件绑定到页面上不会随时更改的低级元素,同时允许您控制哪个动态元素实际触发该容器中的事件.
<div id="container"> <div id="ajax-content"> <a href="#" class="created-link">A new link</a> </div> </div>
所以我们知道< a>在触发DOM ready事件之后由ajax函数创建,因此应用于它的任何直接事件都将无效.
相反,我们将事件绑定到较低级别的未更改元素,并冒泡到包含动态DOM元素.
$('#container').on('click','.created-link',function(event) { event.preventDefault(); // Your normal onclick code });
原文地址:https://www.jb51.cc/jquery/178953.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。