javascript - IE8 appendChild "Unexpected call to method or property access"

标签 javascript jquery internet-explorer-8 appendchild

我真的需要一些帮助来解决我遇到的这个问题。似乎只有在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 标准的一部分)。但是,您目前可以使用 closurei 的每个值隔离在它自己的 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/

相关文章:

javascript - 如何使用jQuery在指定点停止 float div

javascript - 如何查找表中特定列的相邻td

css - IE8 和 CSS @font-face 使浏览器崩溃

css - CSS 翻转的 Internet Explorer 8 问题

javascript - 如何解决 - 在同一渲染树中发现重复存在插槽 "default"

javascript - 如何使用 jQuery 在每个 Ajax 请求上重新生成 session token ?

在函数体内使用ajax时,Javascript函数未定义错误

javascript - JQuery 中 document.getElementbyId 的等价物是什么?

javascript - 神秘的垃圾字符 - 仅限 IE 8

Javascript 文件读取器 : Extracting text