我打开一个窗口,想在某些条件下进行一些计算.问题是在IE中,只有第一呼叫test(从ready)是由新窗口中执行,但后续调用test(带的setTimeout设置)在父窗口而不是用于新窗口(即执行win).
它在FF中工作正常.
说明代码(此代码在父窗口中):
var win = window.open(some_url, window_name, argument_string);
with (win) {
function test() {
alreadyrunflag += 1;
if (alreadyrunflag < 10) {
window.setTimeout(function() { test(); }, 500);
}else {
//perform calculation
}
}
jQuery(win.document).ready(function() {
alreadyrunflag = 0
test();
});
}
Run Code Online (Sandbox Code Playgroud)
我强烈建议不要with在这种情况下使用(坦率地说,几乎任何其他情况).相反,只需编写win.必要的地方.就像Eric Meyer一样,我不是 "被认为有害"的散文的忠实粉丝,但道格拉斯克罗克福德的这篇文章我完全同意.
with修改"范围链",使其需要严格的JavaScript知识才能完全理解.有关详细信息,请参阅Crockford的文章.它还引入了速度惩罚(虽然我已经听过人们对它们的咆哮,但我怀疑成本真的那么高).对可维护性的影响是不可接受的.此外,您不能在新的严格模式(MDC链接)中使用它,这是一种有用的模式,可以帮助您避免一些常见的错误.
在这种情况下,在我看来,范围链应该以您期望的方式解决(以及Firefox显然正在这样做的方式),但坦率地说,我对IE的JScript实现无法处理它并不感到震惊一样的方法.和/或它可能是一个jQuery最终被使用的问题(打开窗口中的那个或刚刚打开的窗口中的那个;你不能确定,它将是时间依赖的... yuck) .
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |