我正在通过ajax将html内容加载到div上(使用mootools 1.11和squeezeBox,如果重要的话).
在我加载的内容中,我有一些JS来操作一些加载的 HTML对象.
在FF中一切正常,但是当我在IE中加载它(现在在IE7上测试)时,代码失败,“’null’为null或不是对象.
快速测试表明,AJAX加载的新元素不在IE DOM中.加载了一个id为’test’的div,当我运行document.getElementById(‘test’)时,我得到了null.不用说在原始元素上运行getElementById工作正常.
在我加载的内容中,我有一些JS来操作一些加载的 HTML对象.
在FF中一切正常,但是当我在IE中加载它(现在在IE7上测试)时,代码失败,“’null’为null或不是对象.
快速测试表明,AJAX加载的新元素不在IE DOM中.加载了一个id为’test’的div,当我运行document.getElementById(‘test’)时,我得到了null.不用说在原始元素上运行getElementById工作正常.
更多信息:
我把我的代码放在窗口’domready’中.尝试使用’load’事件,但IE从未调用它.
UPDATE
建议,我在IE8上检查了相同的脚本,它具有更好的调试能力.
似乎问题确实在时机上.我在windows的domready上运行我的代码,它似乎立即运行,而没有真正等待DOM准备就绪(在弹出窗口中).使用调试器运行相同的脚本,一旦整个页面加载,找到没有问题的元素.
所以我想现在的问题是如何让脚本在适当的时间运行.
>在dom准备好之前,domready事件似乎很好
>加载事件似乎根本不会发生
>在HTML对象之后将脚本放在文件的末尾也没有帮助
>在Mootools AJAX选项中,我将’evalScripts’指示为true,否则脚本根本不会运行
有任何想法吗?
解决方法
没有什么能阻止IE将元素加载到dom中.更新innerHTML属性后,也没有“domready”这样的东西.考虑一下:
new Ajax("someurl",{ method: "get",evalScripts: true,onComplete: function() { $("someid").setHTML(this.response.text); // load content. } }).request();
现在,这里的问题是,evalScripts是在onComplete之前运行还是之后运行.我认为你发回的脚本与你用来更新的标记有关吗?
1.11的源代码如下:
onComplete: function(){ if (this.options.update) $(this.options.update).empty().setHTML(this.response.text); if (this.options.evalScripts || this.options.evalResponse) this.evalScripts(); this.fireEvent('onComplete',[this.response.text,this.response.xml],20); },
表示在更新后评估脚本:在onComplete之前评估脚本,因此使用:
update: $('somediv'),evalScripts: true
应该工作.如果没有,那么我建议尝试:
new Ajax("someurl",onComplete: function() { $("someid").setHTML(this.response.text); // load content. this.evalScripts(); // or if it fails still,delay it: /* if (window.ie) (function() { this.evalScripts(); }).delay(100,this); */ } }).request();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。