我在 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
似乎可以使其正常工作。
答案 0 :(得分:1)
最后,答案与RequireJS无关。我的JS里面有一个splice
命令,IE8不知道怎么回事。将splice
更改为 slice
后,它就有效了。
在使用早期IE版本搜索拼接问题之后,我发现this问题很常见并且有很多人修复过。
就我而言,我所要做的就是改变
return Array.prototype.splice.call(arguments, 0);
到
return Array.prototype.slice.call(arguments, 0);
答案 1 :(得分:0)
当您参考控制台对象
时,具有关闭开发模式的IE浏览器将引发异常