- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个简单的函数会在 IE 8 中导致堆栈溢出错误。尽管我没有测试 IE 7 或 6,但在任何其他浏览器中似乎都没有出现该问题。
具体错误如下:-
SCRIPT28: Out of stack space
jquery.min.js, line 2 character 7498
SCRIPT2343: Stack overflow at line: 2
有问题的功能:
function switchImage(size, objid, prefix, fullimage){
if(size !== 'full'){
var image = prefix + size + '/' + size +'_' + fullimage;
}
else {
var image = prefix + size + '/' + fullimage;
}
$('#' + objid).data('type', size)
.append('<img id="preload" src="' + image + '" style="display:none;" />')
.find('#preload').load(function(){
$('#' + objid).find('img').attr('src', image);
$(this).remove();
});
}
为了概述用例,我将解释此功能的用途:
当用户调整图像大小时(使用 jqueryUI resize),宽度/高度在另一个函数中进行比较。
一旦图像增长到一定大小,就会调用此函数,如您所见,它会附加一个隐藏的 <img>
。元素添加到具有更高分辨率版本图像的“src”属性的 DOM(如果图像被用户缩小,则更低。
加载后,可见元素的 src 属性会更新,隐藏元素会被移除。
这证明了当用户调整图像大小时图像的出色动态切换在整个过程中保持良好的图像质量....
我似乎无法弄清楚是什么导致了 IE 8 中的问题。删除此功能后,不会发生任何错误,尽管存在错误,但该功能仍然可以正常工作(尽管调整大小性能很差)在 IE 8 中)。
如有任何帮助,我们将不胜感激。
更新:我似乎已经通过将函数重写为以下内容解决了原始问题:-
function switchImage(size, objid, prefix, fullimage){
var $el = $('#' + objid);
if(size !== 'full'){
var image = prefix + size + '/' + size +'_' + fullimage;
}
else {
var image = prefix + size + '/' + fullimage;
}
$el.data('type', size);
$('<img id="preload" src="' + image + '" style="display:none;" />')
.appendTo($el)
.one('load', function(){
$('#' + objid).find('img').attr('src', image);
$(this).remove();
});
}
如您所见,唯一真正的区别是我使用 .appendTo() 而不是 .append() 以及使用 jQuery .one() 方法来确保加载事件只发生一次。尽管元素在之后被直接删除,但我不明白为什么这会有什么不同。
我真的很想知道是否有人可以阐明这一点,以便我可以学习如何在将来避免此类问题。干杯。
最佳答案
如果您没有 $(this).remove()
,您的初始函数将直接进入无限循环。本质上,您所做的是将 src
属性设置为 all img
标签,包括预加载图像本身。 (将 $(this).remove()
替换为 console.log('loaded')
并观察它在 Firebug 中无限循环)
我猜想在 IE8 中,一旦该属性也设置为预加载图像,它会首先调用您的“加载”事件处理程序在执行下一行 $( this).remove()
(解释堆栈溢出),而其他浏览器可能首先完成了整个函数的执行,从而删除了预加载图像,从而防止了无限循环。 (这只是一个猜测)
初始版本的猴子补丁将使用 .find('img:not(#preload)')
而不仅仅是 .find('img')
.
您的补丁还可以防止无限循环,因为 .one()
确保它只运行一次。
但最终我会将函数重构为以下内容:
function switchImage(size, objid, prefix, fullimage){
var $el = $('#' + objid),
$image = $el.find('img'),
$preload = $('<img>');
if(size !== 'full'){
var image = prefix + size + '/' + size +'_' + fullimage;
}
else {
var image = prefix + size + '/' + fullimage;
}
$el.data('type', size);
$preload
.on('load', function () {
$image.attr('src', image);
})
.attr('src', image);
}
另请注意,预加载图像实际上不需要显式附加到 DOM 来满足您的目的。
关于javascript - 为什么我的 jQuery 函数在 IE 8 中导致 'Stack Overflow' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629013/
我是网页设计新手。现在我遇到了我目前工作的 2 个网站的问题。我的模板只支持 Firefox 浏览器,不支持其他主流浏览器,如 IE、chrome、Opera、safari。 我试过一些 If IE
在我的 HTML 上,使用了下面的元标记来解决一些字体问题。我只想知道: 这两个元标记的含义相同吗?还是每一个都不一样? [以逗号分隔] [以分号分隔] 请解释一下。 最佳答案 Microsoft
这句话究竟是什么意思? 部分示例使用 ,分隔 IE 的版本,而有些使用 ; ;哪个是正确的? 订单IE=9; IE=8; IE=7; IE=EDGE有一些重要性,我想知道。 编辑:我正在使用 最佳答
这句话究竟是什么意思? 一些示例使用 ,分隔 IE 的版本,而有些使用 ; ;哪个是正确的? 订单IE=9; IE=8; IE=7; IE=EDGE有一定的重要性,我想知道。 编辑:我正在使用 最佳
在 IE 8 中,我们可以带出开发者工具。然后在顶部,有一个浏览器模式: IE 7 IE 8 IE 8 Compatibility View 所以如果 IE 7是强制页面显示为好像浏览器是 IE 7,
我认为不需要任何描述。我只需要我的 IE 11 单选按钮与 IE 8 中的一样,即颜色为 3-d 蓝色。在 IE 11 中,默认单选按钮是二维的,颜色为黑色。目前还没有解决这个问题。 最佳答案 检查这
我必须编写一个显示密码对话框的小程序。问题是对话框设置为始终在顶部,但是当用户单击 IE 窗口时,对话框仍然隐藏在 IE 窗口后面。并且由于对话框是模态的并且保持全部 IE 线程 IE Pane 不会
如何制作适用于所有 IE 浏览器的样式表。不只是 ie.css 中的 IE 8 本站主题的ie.css文件中只包含IE8样式。 最佳答案 他们这样做的原因是因为他们可能不支持 Internet Exp
使用有什么区别吗 ... 或者 ... ? 最佳答案 如果一种罕见的、神话般的浏览器被称为 ,就会有所不同。 Internet Explorer 6.66 被发现。 关于internet-explor
我试图在 IE7+8 中使用字体图标并遇到了一个问题,这个问题可以通过仅 IE7 的样式表轻松解决。长话短说,现在 IE7 和 IE9 都以某种方式运行我的仅 IE7 样式表(IE8 运行得很好)。我
我实现了上传的图片显示在网站上。为了 图片未正确上传意味着我将错误图片替换为 那?当我加载网站时,我遇到了 错误图像不存在的问题 定义,并且灯箱在 chrome 和 firefox 中加载 但它没有在
我有一个特殊的问题。我正在尝试“现代化”和为旧 IE 制作的旧应用程序,以便在 IE 11 中工作。但不知何故,CSS 类没有应用于 DOM 元素。 CSS 非常简单: .header { h
对于 IE 7 和 IE 8,IE 上 URL 的 2k 长度限制是否仍然存在? (后 IE 6 时代) 最佳答案 http://support.microsoft.com/kb/208427 似乎它
我们正在完善这个网站:dev.underglassframing.com 除了主要内容 div (#main) 后面的背景在 IE 7、8 和 9 中的内容之前停止外,在每个浏览器中一切都很好。我在末
我在 IE 11 中搜索过与 border-radius 相关的类似问题,但是 only one found on the Microsoft IE Developer site描述了自从“升级”到
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit th
这个问题在这里已经有了答案: (CSS?) Eliminating browser's 'selected' lines around a hyperlinked image? (5 个答案) 关闭
我知道有 1000 个问题,但我就是无法让它发挥作用。我只是想针对所有版本的 IE(包括 IE11)并给 html 一个特定的类,对于所有其他浏览器(firefox、opera、chrome),我希望
我有一个嵌入了 Internet Explorer 的程序。 在某些情况下,我需要调整嵌入式 IE 的缩放级别。我正在使用带有 OLECMDID_OPTICAL_ZOOM 的 ExecWB 命令来执行
我正在开发一个网络应用程序。我的应用程序在 chrome 和 firefox 上运行良好,但由于某种原因在 IE 中出现了一些错误。即使出现几个错误,应用程序仍然可以顺利运行,没有明显的问题。 我想对
我是一名优秀的程序员,十分优秀!