【问题标题】:IE8 appendChild "Unexpected call to method or property access"IE8 appendChild“意外调用方法或属性访问”
【发布时间】:2013-09-19 15:41:11
【问题描述】:

我确实需要一些帮助来解决我遇到的这个问题。好像只在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);
} 

谢谢...

【问题讨论】:

  • 这是一个已知的错误:webbugtrack.blogspot.ro/2009/01/…
  • 你到底为什么要将脚本附加到脚本标签!执行代码!!!哎呀。我很高兴这是一个错误,因为这是个坏主意。
  • 不禁想到,执行具有特定变量/值的语句似乎需要做很多不必要的工作。您是否考虑过 using an closurei 的每个值分开?
  • 嘿,我正在为其他人的旧代码进行代码清理,是的,不幸的是,它已经在我的盘子里了这行得通吗?
  • Sergiu Paraschiv 很好的信息,但我将如何使用脚本标签而不是 styleTag,我是否需要脚本标签。这可以简单地在 Jquery 中完成吗?

标签: javascript jquery internet-explorer-8 appendchild


【解决方案1】:

这似乎只是某些 IE 版本的限制。但是,您似乎对替代方案持开放态度:

我怎样才能重新安排这个工作?

我猜这个 sn-p 是因为 i 似乎在最后改变了 .show() 的值而感到沮丧。这可能是由于 JavaScript 目前在 .mouseover() 的异步性质中缺乏块级范围和混合,因此在循环已经运行完成并将其递增到 showContain.length+1 后,它将引用 i

最终,您将能够使用let 代替var 在循环内创建块级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);
}

【讨论】:

  • 是的,它有效!只需要重构 (i) $('#showdiv' + i + '') 的引号,但从那时开始工作。编辑 $('#showcase' + i) 谢谢乔纳森 Lonowski
猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多