添加alert()使“not working script”正常工作

时间:2010-09-21 14:47:32

标签: javascript alert

我需要重写几年前编写的代码,以便与现代浏览器一起使用。该网站包含几个Javascript文件。

在它们上面有一个像这样的代码 - 它动态生成DOM元素:

createTabs();
createTabsContent();

现在,我在Chrome中打开网站,在加载页面后,我尝试通过

更改一些新生成的元素样式
document.getElementById('element').style.display = 'none';

并且无效 - 无论是表单脚本还是Chrome控制台。是的,DOM中存在id为#element的元素。什么是奇怪的 - Chrome不会报告任何错误。

但是,当我修改代码并执行类似的操作时:

alert('test'); //i put alert here 
createTabs();
createTabsContent();
//alert('test'); // or put it here

一切正常。

在其他浏览器中:IE8,FF,Opera一切正常,也没有错误。 我使用jQuery document.ready,然后尝试使用window.onload事件 - 但它们失败了 - 没有任何改变。

可能导致此行为的原因是什么?

2 个答案:

答案 0 :(得分:5)

这种与DOM相关的东西不起作用的症状,但在添加警报时开始工作通常可以通过推迟第二步来解决:

this.foo();
var me = this;
setTimeout(function() { me.bar(); }, 0); // Whatever library you're using may provide a cleaner way of deferring execution.

IE特别容易出现无法立即与之互动的事情。我还没有真正遇到过Chrome。

答案 1 :(得分:2)

当您插入警报后代码“正常工作”时,通常意味着您通过执行警报暂停来绕过某种竞争条件。例如,您可能有一个AJAX请求,后跟一个函数调用,该函数调用应该在AJAX结果上工作(但是在AJAX请求之后调用不正确,而不是在完成时传递给AJAX处理程序调用)。如果没有警报,该函数还没有数据,因此失败,但是当您发出警报时,请求需要时间来完成并且函数成功。

很难确定您遇到的问题是由于没有更多关于代码的背景信息。