jquery-1.5.1.min.js и IE8 - PullRequest
       4

jquery-1.5.1.min.js и IE8

2 голосов
/ 14 марта 2011

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 ]

2 голосов
/ 26 марта 2011

Я предлагаю вам отладить ваш код, так как минимальная версия jquery работает просто отлично.У вас есть проблема с вашим кодом, который косвенно вызывает ошибку в Internet Explorer, и вы должны обойти это.

Моя любимая вещь (и то, что я сделал для аналогичной проблемы, которую я только что выяснил),

  1. вырежьте весь свой javascript и запустите его, чтобы убедиться, что он работает
  2. вставьте его обратно, по частям, тестируя каждый раз
  3. как только вы найдете оскорбительный кусок кода javascript, вырежьте его и вставьте все остальное обратно, чтобы убедиться, что это единственная проблема
  4. , сузьте его в этом блоке, чтобы увидеть, где задерживается Internet Explorer.Если вы используете PHP, вам может потребоваться сделать что-то подобное, чтобы Internet Explorer пропустил код, вызывающий его сбой

$('li[title]').qtip({</p> <pre> 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 голос
/ 12 октября 2011

Я использовал «slideToggle» из версии jquery «jquery-1.6.4.min.js» на одном большом элементе DIV. Элемент "DIV" имеет внутри больше элементов HTML. В Internet Explorer 8 (возможно, на FF тоже), когда я пытаюсь загрузить функцию slideToggle на этом большом DIV, я получил ошибку. Не уверен, что было настоящей причиной ошибки, но во время моего расследования я обнаружил ошибку в 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}}})
0 голосов
/ 23 июня 2011

Для меня это возникает при установке отступа или полей на отрицательное число. Это обсуждалось в ряде мест онлайн: «IE отрицательный отступ». Ниже приведены контрольные значения из моей консоли IE, которые подтверждают это.

  • a.prop >> 'paddingTop'
  • a.prop === "ширина" || a.prop === "высота" >> false
  • Math.max (0, a.now) >> 0
  • a.now >> -1.8277004484618357
  • (a.prop === "width" || a.prop === "height"? Math.max (0, a.now): a.now) + a.unit >> "-1.8277004484618357px "
    • a.elem.style [a.prop] = (a.prop === "ширина" || a.prop === "Высота" Math.max (0, a.now): a.now ) + a.unit >> Неверный аргумент

экспериментирование: - a.elem.style [a.prop] = '1px' >> '1px' - a.elem.style [a.prop] = '-1px' >> Неверный аргумент

Поток завершен в: 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 ошибка 4571 , где они решили, что поведение было правильным, и что разработчики должны быть более осторожными при установке значений полей / отступов, так как отрицательный отступ / отступ на самом деле действительный. Они сказали, что хотели бы, чтобы FF выдавал ошибку, как IE. Вот Это Да! не слышу так часто!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...