我一直在努力弄清楚这是怎么可能的。所以我有一个 ASP.Net 网站。在呈现的 HTML 中类似
<script type="text/javascript">
alert('should run once');
if(x === undefined){
var x=true;
alert('new x variable');
}else{
alert('x exists');
}
</script>
但是,无论出于何种原因,应该运行一次的东西实际上运行了两次。在 Firebug 下调试时,我实际上单步执行了 alertnew x variable
,此时它似乎会同时显示两个警报。之后,它跳到 x exists
,就好像有两个独立的线程在运行相同的代码。这不会发生在 Internet Explorer 8 中,但会发生在 Chrome 和 Firefox 中(截至该日期的最新版本)
所以这就是警报吐出的内容:
- 应该运行一次
- 新的 x 变量
- 应该运行一次
- x存在
我知道我可以通过将所有内容包装在 has_run
变量中来解决这个问题,但我更愿意了解这里发生了什么。
脚本 block 未注册或其他任何东西,它是通过 Literal
控件直接插入的。另外,页面上有一个 UpdatePanel,但是这个脚本 block 不在 UpdatePanel 中,我已经确认没有 UpdatePanel 正在刷新。我已经三次检查过这段代码只在我的 HTML 中出现过一次。加载时没有其他 HTTP 请求(例如 UpdatePanel)正在发出。只需几个 jQuery.ajax 加载。
这怎么可能?我如何解决它?
最佳答案
我在@mikemanne 的帮助下解决了这个问题
jQuery.dialog 将移动 DOM 中的对话框 div。所以这意味着它会导致它被执行两次,显然可能是在不同的线程中导致不稳定的行为。
关于javascript - 顶级脚本 block 执行了两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932422/