Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery对IE6来说太快了?(通过添加警报解决了奇数问题?)_Jquery_Internet Explorer 6 - Fatal编程技术网

jQuery对IE6来说太快了?(通过添加警报解决了奇数问题?)

jQuery对IE6来说太快了?(通过添加警报解决了奇数问题?),jquery,internet-explorer-6,Jquery,Internet Explorer 6,IE6总是让我惊讶,但这一个真的很奇怪 我正在创建一个水平菜单,我需要每个“按钮”中的文本垂直居中。在除IE之外的任何浏览器中都很容易。因此,对于IE浏览器,我使用一些javascript为每个按钮添加必要的填充,以确保文本居中显示 我在IE8和IE7中工作得很好。IE6只是因为某些原因做得不对 因此,我在添加填充的行之前添加了一个警报: $menuTriggerUL.children('li').each(function(i){ var heightDifference =

IE6总是让我惊讶,但这一个真的很奇怪

我正在创建一个水平菜单,我需要每个“按钮”中的文本垂直居中。在除IE之外的任何浏览器中都很容易。因此,对于IE浏览器,我使用一些javascript为每个按钮添加必要的填充,以确保文本居中显示

我在IE8和IE7中工作得很好。IE6只是因为某些原因做得不对

因此,我在添加填充的行之前添加了一个警报:

$menuTriggerUL.children('li').each(function(i){
        var heightDifference = tallestTab-tabTextHeight[i];
        if (heightDifference < 0){heightDifference=0};
        alert(heightDifference);
        $(this).children('a:first').css("padding-top", Math.floor(heightDifference/2) );
    });
$menuTriggerUL.children('li')。每个(函数(i){
var heightDifference=tallestTab tabTextHeight[i];
如果(高度差<0){heightDifference=0};
警戒(高度差);
$(this.children('a:first').css(“padding top”,Math.floor(heightDifference/2));
});
有了这个警报,IE6将一个接一个地对每个元素正确地应用正确的填充

如果我把警报拿出来,它会笨手笨脚地把第一个警报拿对,但会在后面的警报上绊倒

似乎jQuery正试图以IE6无法处理的速度运行。很明显,这可能不是正在发生的事情,但我不确定如何描述它

有些事情可能是问题的一部分:我正在使用jqueryeach()函数,并在其中从以前填充的数组中获取值

关于可能发生的事情有什么理论吗


更新:jhurshman下面的答案就是解决方案。我很想知道更多关于这个问题的信息,如果大家有一些想法,哪些场景可能会触发IE6的这个问题。我从来没有遇到过它,但很高兴工具包中有一个补丁供将来使用

if语句上没有右括号。

在使用IE时(特别是6,但有时也使用7),经常会出现DOM在以某种方式操作后似乎没有立即准备好的情况。通常,这些问题可以通过执行以下操作来延迟有问题的代码来解决:

setTimeout(troublesomeCode, 0);
(其中
TroublomeCode
是对将执行有问题操作的功能的引用)


我还将尝试以相反的顺序在节点上循环,看看这是否有任何区别。

这都在某个$(文档)中。就绪处理程序?如果(heightDifference<0){heightDifference=0};那是他们一分钟前的事吗?还是我的眼睛在欺骗我?@jhurshman我没有编辑我的原始帖子,但也许是其他善良的灵魂编辑了?我肯定以打字错误而闻名。哇……真是……奇怪!你的解决方案完全解决了这个问题。那么,有没有更详细地解释该特定问题的参考/链接?这似乎应该是jQuery内部正在处理的事情。当这是一个比其他问题更重要的问题时,是否存在某些特定的场景?我不能说我见过任何关于问题到底是什么以及为什么这种方法有帮助的解释。添加警报后,几乎所有消失的问题都可以通过此选项“解决”。这在我公司的JS开发人员中是众所周知的,所以这实际上是一个笑话:“你试过setTimeout zero吗?”我对这些问题的原因的最好猜测是IE以非线程安全的方式维护了一些与DOM树相关的数据结构。执行setTimeout zero可以让当前的JS线程在尝试某些导致IE需要访问这些数据结构的操作之前完成。感谢所有帮助/信息。令人惊讶的是,在2010年,我仍然在为IE探索新的方法,让我摆脱困境;o)