jquery-1.5.1.min.js和IE8

时间:2011-03-14 19:27:07

标签: jquery-ui jquery jquery-validate

IE8从jquery 1.5.1最小化时发出错误:Invalid argument,但是firefox没有。

错误来自这一行:w

 a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),d.expr&&d.expr.filters&&(d.expr.filters.animated=function(a){return d.grep(d.timers,function(b){return a===b.elem}).length});var ce=/^t(?:able|d|h)$/i,cf=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?d.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,g=f.documentElement;if(!c||!d.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=f.body,i=cg(f),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||d.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||d.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:d.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);d.offset.initialize();var c,e=b.offsetParent,f=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(d.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===e&&(l+=b.offsetTop,m+=b.offsetLeft,d.offset.doesNotAddBorder&&(!d.offset.doesAddBorderForTableAndCells||!ce.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),f=e,e=b.offsetParent),d.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;d.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},d.offset={initialize:function(){var a=c.body,b=c.createElement("div"),e,f,g,h,i=parseFloat(d.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),a=b=e=f=g=h=null,d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=e==="absolute"&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=cf.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!cf.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=cg(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=cg(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window)

我的代码没有错误...

3 个答案:

答案 0 :(得分:2)

我建议您调试代码,因为jquery的最小版本工作得很好。您的代码有问题,间接导致Internet Explorer出错,您必须解决此问题。

我最喜欢的事情(以及我为类似的问题所做的事情,我刚才想到的)是

  1. 删除所有的javascript并运行它以确保它正常工作
  2. 将其粘贴回来,一次一块,每次都进行测试
  3. 一旦你找到了令人讨厌的javascript代码块,将其删除并将其他所有内容重新放入以确保这是唯一的问题
  4. 将其缩小到那个块中,看看Internet Explorer的速度在哪里。如果您使用的是PHP,则可能需要执行类似的操作才能让Internet Explorer跳过导致其失败的代码
  5. $('li[title]').qtip({

        style: { 
            name: 'dark',
            background: $('.ui-widget-header:first').css('background-color')
    <?php   
    //internet explorer is retarded
    if(!preg_match('/MSIE/i',$_SERVER["HTTP_USER_AGENT"]))
    { 
            echo ", tip: true";
    }   
    ?>
        },
        position: {
            target: 'mouse',
            corner: {
                target: 'topLeft',
                tooltip: 'bottomLeft'
            }
        }
    
    });
    

    我希望有所帮助! (如果确实如此,请标记为答案)

答案 1 :(得分:1)

我在一个大的DIV元素上使用了来自jquery版本“jquery-1.6.4.min.js”的“slideToggle”。 “DIV”元素包含更多html元素。 在Internet Explorer 8(也许在FF上)当我尝试在这个大DIV上加载slideToggle函数时,我收到了一个错误。不确定错误的真正原因是什么,但在我的调查过程中,我发现了jquery中的一个错误:

_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}})

有些情况下“a”变量为“NAN”。因此,我遇到了一些错误。 所以我把这个检查程序放在里面:

if(isNaN(a.now)){return;}

我所有的问题都消失了。

_default:function(a){if(isNaN(a.now)){return;}a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}})

答案 2 :(得分:0)

对我来说,将填充或边距设置为负数时会出现这种情况。这已在网上多个地方讨论过:“IE负面填充”。以下是来自我的IE控制台的手表值,证明了这一点。

  • a.prop&gt;&gt; 'paddingTop'
  • a.prop ===“width”|| a.prop ===“height”&gt;&gt;假
  • Math.max(0,a.now)&gt;&gt; 0
  • a.now&gt;&gt; -1.8277004484618357
  • (a.prop ===“width”|| a.prop ===“height”?Math.max(0,a.now):a.now)+ a.unit&gt;&gt; “-1.8277004484618357px”
    • a.elem.style [a.prop] =(a.prop === “宽度” || a.prop === “高度” Math.max(0,a.now):a.now )+ a.unit&gt;&gt;参数无效

运行实验:   - a.elem.style [a.prop] ='1px'&gt;&gt; “1像素”   - a.elem.style [a.prop] =' - 1px'&gt;&gt;参数无效

StackOverflow: jQuery, IE & Animate处的帖子建议如下:

a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now||0):a.now)+a.unit;

......这对我没有任何帮助。

我真的不认为这是一个jQuery错误,我没有在他们的错误跟踪系统中找到它(我承认我看起来不太难),而是IE无法解决的问题处理负填充/边距。 jQuery是否应该处理这个问题是一个艰难的决定......

编辑:这是以jQuery bug 4571打开的,他们认为行为是正确的,并且开发人员应该更加谨慎地设置边距/填充值,因为负边距/填充确实无效。他们继续说他们希望FF会像IE一样抛出错误。哇!经常听不到!