0

我正在使用一些 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 每个函数来循环这个数组,并在一个漂亮的小无序列表中返回所有图像。

问题是在使用 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 注册的可靠方法,这样我的每个函数都不会失败?

4

2 回答 2

3

它是

$(document).ready(..)

不是

$('document').ready(..)
于 2010-10-10T18:30:54.937 回答
1

很抱歉说明了这一点,但这两段代码是否在同一个脚本/文件中?您是说 IE 与其他浏览器不同,序列错误,所以我想知道一个或两个是异步的。

另一个明显的事情是让你的函数检查路径数组不为空,这样它就不会抛出错误。抱歉,如果此评论让您将鼠标扔到屏幕上。有没有办法让生成路径数组的函数调用该函数,或者至少设置一个布尔值,然后您的函数可以使用它来确定它是否设置了路径数组。

也许您可以在页面的其他位置定义函数并让您的 jquery 执行以下操作: document.ready(myfunction());

于 2010-10-10T19:21:59.683 回答