【发布时间】:2014-09-19 21:21:30
【问题描述】:
我在 RequireJS 应用程序中使用 jQuery 调用如下函数。我在 IE8 上收到一条错误消息,指出“对象不支持此属性或方法”。
$(document).ready(function(){
if($("body").hasClass("js-splash-overlay")){
$("body").showSplashOverlay();
}
});
飞溅覆盖模块。
'use strict';
define(['jquery'], function($){
return function(){
$.fn.showSplashOverlay = function() {
var $overlayData = $(this).find(".js-splash-data").html(),
$overlayContent = $("<div id=\"overlayHolder\" class=\"js-overlay-holder\">" + $overlayData + "</div>"),
$formElement = $("form")[0],
options = {
autoOpen: false,
closeOnEscape: false,
draggable: false,
autoResize:false,
hide: {
effect: "fade",
duration: 150
},
modal: true,
resizable: false,
show: {
effect: "fade",
duration: 150
},
width: 620,
maxWidth: 700,
minHeight:50,
fluid: true
};
$overlayContent.dialog(options).dialog("open");
setTimeout(function () {
$formElement.submit();
}, 1500);
return this;
};
}
});
首先,我认为调用发生时 jQuery 可能不存在。但是,当我alert($("body").attr("class")) 时,它清楚地显示了身体class。因此,很明显 jQuery 在调用时存在。
以上内容在 Chrome、FF 和其他最新浏览器上运行良好。不幸的是,我们必须支持 IE8 并要求修复该问题。
JQuery 版本:1.11
RequireJS 版本:2.1.11
非常感谢,非常感谢任何建议或指导。很高兴回答任何问题。
更新:问题是 IE8 不喜欢的恶意代码。它被称为splice。将其更改为 slice 似乎可以正常工作。
【问题讨论】:
-
问题出现在
showSplashOverlay中的可能性非常高,不管是什么原因? -
究竟是哪一行引发了错误?
-
@adeneo 添加了spash覆盖模块以清除任何疑问
-
@SeanVieira 它在我调用 showSplashOverlay() 的那一行准确地抛出了错误
-
那么执行
showSplashOverlay的代码是如何加载的呢?
标签: jquery internet-explorer-8 requirejs slice splice