【问题标题】:JS error on web page in IEIE中网页上的JS错误
【发布时间】:2010-12-29 14:24:04
【问题描述】:

下面的错误如何解决。div应该是表格吗??

 <script>

 function EvalSound(soundobj) {

  var thissound= eval("document."+soundobj);
  thissound.Play();
 }
 </script>


  <div id="s_player" style="display:block;width:620px;height:53px;">
  <embed src="/media/a.wav" autostart=false width=0 height=0 id="sound1" enablejavascript="true">

                                   <a href="#" onclick="javascript:EvalSound('sound1');">   <b>Play test sound</b></a></td>
                    </div>

错误是 网页错误详情

用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 5.1;Trident/4.0;GTB6.6;.NET CLR 3.0.04506.648;.NET CLR 3.5.21022;.NET CLR 2.0.50727;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729;InfoPath.2;FDM) 时间戳:2010 年 12 月 29 日星期三 14:22:09 UTC

Message: 'undefined' is null or not an object

【问题讨论】:

  • 这和jQuery有什么关系?
  • 真的 它与 jQuery UI 有什么关系?

标签: javascript javascript-events


【解决方案1】:

您可以在此处更正几件事:

1) 不要使用eval 来查找属性

var thissound= eval("document."+soundobj);

变成

var thissound= document[soundobj];

2) 但是,如果某个东西有id,请改用document.getElementById 来查找它,所以:

var thissound = document.getElementById(soundobj);

3) 您没有在事件处理程序属性上使用 javascript: 前缀,所以

<a href="#" onclick="javascript:EvalSound('sound1');">

变成

<a href="#" onclick="EvalSound('sound1');">

(虽然它在很大程度上是无害的,但它只是定义了一个你从不使用的标签)。 (您只能在链接属性上使用javacript: 伪协议,例如href。)

更新:你已经表明以上都没有做到,所以:

4) sound1 真的独一无二吗?

您在页面上还有其他名为“sound1”的任何内容吗? IE 与mixing together namespaces 存在问题。即使只是在页面范围内具有该名称的变量也可能导致问题。

进一步更新

5) 你可以在 IE 中使用embed 吗?

我完全不确定你可以,我认为 IE 想要 object 而不是 embedThis page 在 IE 中播放声音很有趣,看起来 IE 可能内置了一个脚本来加载这样的对象;查看脚本的内容可能会帮助您弄清楚您需要做什么。

X) 穿过它

要想弄清楚这一点,最好的办法是使用调试器遍历代码(IE8 内置了开发工具,或者您可以使用 VS.Net 的免费版本)。这将帮助您缩小问题所在。听起来(没有双关语)好像没有找到 sound1 元素,但实际上,它可能是几件事中的任何一个。如果是没有找到该元素,我的猜测是#5 是罪魁祸首。


可能跑题了:您已将您的问题标记为jquery。如果你真的在使用 jQuery,你可能会比现在看起来更多地使用它。例如,您可以使用 jQuery 来设置事件处理程序,而不是使用非常老式的 onclick,并且您可以使用 jQuery 而不是 document.getElementById,尽管在这种特定情况下它不会给您带来任何好处。

【讨论】:

  • 它还没有解决问题
  • @Rajeev:所以您已经更改了以上所有内容,但问题仍然存在?好的,添加第四项。你确定找到了声音文件吗?
  • 是的,找到了文件,因为我可以在 firefox 上播放它。而且 sound1 是唯一的 id
  • @Rajeev:我不仅仅指 ID。阅读链接的文章,IE 将一堆不应该的东西混合在一起。
  • @Rajeev:添加了一些最后的想法。祝你好运。
【解决方案2】:

尝试使用

document.getElementByID(soundobj)

而不是 document.soundobj

【讨论】:

    【解决方案3】:

    试试这个:

    <script>
    
     function EvalSound(soundobj) {
    
      var thissound= document.getElementById(soundobj);
      thissound.Play();
     }
     </script>
    

    【讨论】:

    • 它还没有解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多