函数调用在IE8中不起作用(Object不支持此属性或方法)

时间:2014-07-28 16:10:45

标签: jquery internet-explorer-8 requirejs slice splice

我在 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似乎可以使其正常工作。

2 个答案:

答案 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浏览器将引发异常