我正在使用一些 jQuery,它在除 Internet Explorer 8 之外的所有浏览器中都能正常工作(可能不是早期版本,尽管我并不担心这些)。我使用 jQuery 的 .each 函数来循环 JavaScript 数组中的每个元素,该数组是由我使用的相当不灵活的 CMS 在我的页面上自动生成的。
例如,我的 CMS 将 JavaScript 中的图像对象数组写入我的页面:
paths = [];
paths[0] = new Image();
paths[0].src = "/path/to/image1"
paths[1] = new Image();
paths[1].src = "/path/to/image2"
paths[2] = new Image();
paths[2].src = "/path/to/image3"
paths[3] = new Image();
paths[3].src = "/path/to/image4"
然后,我使用 jQuery every 函数循环遍历该数组,并在一个漂亮的小无序列表中返回所有图像。
问题是在使用 jquery 时
$(document).ready(function() { ... });
在 FF/Safari/Chrome 等中工作正常,实际上能够立即渲染我的无序列表,Internet Explorer 似乎在注册 JavaScript 中存在“路径”数组之前运行我的 document.ready 函数(甚至尽管这个 jQuery 包含在图像数组的代码之后)。我知道这一点是因为我在 IE 中抛出了“路径为空/未定义”错误。
当我改变它时
$(document).ready(function() {
到
$(window).load(function() {
我的代码在 IE 中正常工作,因为它仅在加载整个页面后执行我的 jquery 'each' 函数(这很糟糕,因为它会减慢渲染时间并导致我正在尝试执行的操作出现“滞后” ...但是嘿,如果它有效的话)。然而,如果网站已被缓存,IE 有时在使用 $(window).load 注册名为“paths”的数组存在之前仍然会触发我的每个函数。
有人知道一种可靠的方法来确保 IE 立即注册 paths 变量,这样我的每个函数都不会失败吗?
最佳答案
这是
$(document).ready(..)
不是
$('document').ready(..)
关于Internet Explorer 中的 JavaScript : How to do something after a variable is loaded/registered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3901561/