我真的需要一些帮助来解决我遇到的这个问题。似乎只有在IE8上才有。 IE7 工作正常这很奇怪。我正在使用 IE9 (F2) 开发工具 IE8 模拟器,它似乎运行良好。我还检查了 VMware 原生 IE8 并获得了相同的结果。无论如何,这是 IE8 中 appendChild 的问题吗?我怎样才能解决这个问题,是否有 jquery 或更好的方法来编码这一部分。
IE 将此报告为问题 ** s.appendChild(document.createTextNode(jcode)); ** “意外调用方法或属性访问”
for (var i=0; i<showContain.length+1; i++)
{
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
var jcode = "$('#showdiv" + i + "').mouseover(function(){$('.showcaseoff').hide(); $('#showcase" + i + "').show()});";
s.appendChild(document.createTextNode(jcode));
document.body.appendChild(s);
}
谢谢...
最佳答案
这似乎只是某些 IE 版本的限制。但是,您似乎对其他选择持开放态度:
How can I rearrange this to work?
我猜这段代码是因为 i
似乎在最后更改了 .show()
的值而感到沮丧。这将是由于 JavaScript 当前缺乏 block 级作用域和混合 .mouseover()
的异步性质,因此它会在循环已经运行后引用 i
完成并将其递增到 showContain.length+1
。
最终,您将能够使用 let
代替 var
以在循环内创建 block 级 i
(该关键字是即将推出的 ECMAScript 6 标准的一部分)。但是,您目前可以使用 closure将 i
的每个值隔离在它自己的 function
范围内。
function eachShowcase(i) {
$('#showdiv' + i).mouseover(function(){
$('.showcaseoff').hide();
$('#showcase' + i).show()
});
}
for (var i=0; i<showContain.length+1; i++) {
eachShowcase(i);
}
关于javascript - IE8 appendChild "Unexpected call to method or property access",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18899180/