each()在IE8上不起作用,并给了我一个“;期望应用数组或参数对象”;.如何解决

each() does not work on IE8, and gave me a "apply array or arguments object expected". how to solve it?

本文关键字:数组 应用 期望 参数 解决 何解决 对象 不起作用 IE8 each 一个      更新时间:2023-09-26

我在我的网站上使用bootstrap v2.3.1,但当我在IE8上测试它时,我得到了一个错误

"需要应用数组或参数对象"。

这是引导部分:

 enter : function (t)
        {
            var n = e.fn[this.type].defaults, r = {}, i;
            this._options && e.each(this._options, function (e, t)
            {
                n[e] != t && (r[e] = t);
            }, this), i = e(t.currentTarget)[this.type](r).data(this.type);
            if (!i.options.delay || !i.options.delay.show) {
                return i.show();
            }
            clearTimeout(this.timeout), i.hoverState = "in", this.timeout = setTimeout(function ()
            {
                i.hoverState == "in" && i.show()
            },
            i.options.delay.show)
        }

jQuery部分:

each: function( obj, callback, args ) {
        var name,
            i = 0,
            length = obj.length,
            isObj = length === undefined || jQuery.isFunction( obj );
        if ( args ) {
            if ( isObj ) {
                for ( name in obj ) {
                    if ( callback.apply( obj[ name ], args ) === false ) {
                        break;
                    }
                }
            } else {
                for ( ; i < length; ) {
                    if ( callback.apply( obj[ i++ ], args ) === false ) {
                        break;
                    }
                }
            }

当我运行到callback.apply( obj[ name ], args )时,我得到了错误,

主要问题是

e.each(this._options, function (e, t)
            {
                n[e] != t && (r[e] = t);
            }, this);

在IE8上不起作用,并且发生了"期望应用数组或参数对象"。

有谁能帮我解决这个问题吗?

我通过makeArray()解决了这个问题,如下所示:

each: function( obj, callback, args ) {
        var name,
            i = 0,
            length = obj.length,
            isObj = length === undefined || jQuery.isFunction( obj );
        if ( args ) {
            if ( isObj ) {
                for ( name in obj ) {
                    if ( $.browser.msie && '8.0' == $.browser.version ) {
                        args = $.makeArray(args);
                    }
                    if ( callback.apply( obj[ name ], args ) === false ) {
                        break;
                    }
                }
            } else {
                for ( ; i < length; ) {
                    if ( callback.apply( obj[ i++ ], args ) === false ) {
                        break;
                    }
                }
            }

但是callback.apply(obj[name],$.makeArray(args))也适用于Chrome,但我不确定没关系,如果浏览器是IE8,那么我就这么做。