IE不尊重javascript行执行的顺序?

IE不尊重javascript行执行的顺序?,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我试图使用jQuery制作动画,但在IE7/8/9上,在我显示元素之前,它不起作用 function callback() { $('#content').animate([...]); [...] } $('#content').hide(); [...] $('#content').show(); callback(); 它只在do setTimeoutfunction{callback;},300;,在执行回调之前,我可能需要等待IE识别已显示的元素。这里有什么问题?您

我试图使用jQuery制作动画,但在IE7/8/9上,在我显示元素之前,它不起作用

function callback() {
    $('#content').animate([...]);
    [...]
}

$('#content').hide();
[...]
$('#content').show();
callback();

它只在do setTimeoutfunction{callback;},300;,在执行回调之前,我可能需要等待IE识别已显示的元素。这里有什么问题?

您需要等待元素在页面中存在,然后才能使用jQuery选择它

将脚本包装为:

jQuery(function($){
  //your code here
});

它是document.ready事件监听器的快捷方式。

因为JS是单线程的,仅仅因为您调用show并不意味着它实际上正在显示;您需要将控件返回给父级,以允许它在这之前绘制和更新DOM。setTimeout允许您的JS屈服于父级,在继续执行之前对其进行更新。使用0设置超时也很可能有效。

您能制作一个JSFIDLE来演示这一点吗?这有点误导。确实,在硬循环中执行某些操作而不让步通常会阻止页面重新绘制,但这并不意味着您需要让步让DOM“更新”。在浏览器完全更新其内部数据结构之前,任何DOM操作函数都不会返回;下一个脚本语句将看到DOM在内部更新,即使这些更改尚未绘制到屏幕上。因此,连续调用hide和show而不让步不会产生可见的结果,但逻辑上是一致的。他说的动画在没有setTimeout的情况下无法工作,我相信这就是原因。在给定的上下文中,我不认为我的答案有误导性-我没有提到这一点,因为隐藏/显示似乎与问题无关。如果我们先隐藏一个元素,调用.show,然后调用.animate…,不管脚本在调用show和animate之间是否让步。