2010-02-28 45 views
20

我有以下的代码和它的工作(像往常一样)在一切,但IE浏览器。它给了我一个意想不到的调用JQuery中的方法或属性访问,我不知道如何调试它。我一直在使用IE开发工具栏,这是没用的这个错误,只给了我一个12号线(在jQuery脚本中)。Javascript的IE浏览器错误:方法或财产访问的意外呼吁

任何帮助为V大加赞赏:

<script type="text/javascript"> 
$(document).ready(function() { 

    $.history.init(pageload); 

    $('a[href=' + window.location.hash + ']').addClass('selected'); 

    $('a[rel=ajax]').click(function() { 

     var hash = this.href; 
     hash = hash.replace(/^.*#/, ''); 
     $.history.load(hash); 

     $('a[rel=ajax]').removeClass('selected'); 
     $(this).addClass('selected'); 
     $('.loading').show(); 

     getPage(); 

     return false; 
    }); 
}); 

function pageload(hash) { 
    if (hash) getPage(); 
} 

function getPage() { 

    hash = document.location.hash; 
    hash = hash.replace(/^.*#/, ''); 
    var data = 'page=' + encodeURIComponent(hash); 
    $.ajax({ 
     url: "index.php", 
     type: "POST", 
     data: data, 
     cache: false, 
     success: function (html) { 
      $('.loading').hide(); 
      $('tbody').html(html); 

     } 
    }); 
} 
</script> 

这里是历史插件:http://plugins.jquery.com/project/history

这里是演示中,我一直在下面: http://plugins.jquery.com/project/history

还是改变了window.location回到document.location似乎没有区别

Im lost o这一个。当我改变标签即时通话调用它发布后,它的工作,但在即设计是全部坏了,我点击不发布的下一个链接。真的很奇怪!!,在FF,歌剧等工作正常

回答

8

我有点惊讶IE抱怨它,但它是一件好事:它错过getPagehash(例如,把var在第一次使用前)。

在其他它可能产生,这当然是一个Bad Thing(TM)的隐式全局(称为hashwindow对象的属性),但据我所知它根据规范是正确的(有关章节是8.7 [“参考文献 类型”]和10.1.4 [“范围链和标识符分辨率”])。

尽管如此,IE仍然很抱怨。它必须与jQuery调用您的点击处理程序的范围有关。

+0

ive将其缩小到tbody标记。任何想法为什么这会导致问题? IE不识别这个标签吗? PS Thx你说得对你提到的东西是对的 – 2010-02-28 09:39:54

+1

@Ke:IE可以识别'tbody'标签,是的。我刚刚意识到你在做'$('tbody')。html(html)' - 你真的*想把这些内容写到页面上的每个'tbody'上吗?你在写什么HTML?可能是一系列'tr'元素...... IE并不像你通过'innerHTML'来榨取表格行,但我认为jQuery正在为你处理它(Prototype并且我不认为jQuery更为落后在那方面,但我不太了解jQuery)。 – 2010-02-28 11:26:33

0

我找不到在jQuery API历史方法,所以我相信它要么:

  • 第三方插件。
  • 间接呼叫良好的旧window.history对象。
  • 您创建的自定义对象。

我的猜测是,IE(众所周知的污染通过使全球都在全球范围内)认为,以历史任何引用实际上意味着的window.history而且越来越困惑。如果是自定义对象,请尝试将其重命名为myHistory或其他任何内容。

+0

我做了所有这一切,这个历史插件似乎有些破碎。也有50多个字符在URL中的问题,认为我将不得不寻找另一种方式,欢呼无论如何:) – 2010-02-28 10:32:36

0

我认为Crowder先生正在做点什么。据我所知,从jQuery源代码可以看出,如果返回的HTML片段不包含任何<script>标签,并且没有其他不太可能的特征,那么jQuery可能会试图将其填充到您的<tbody>元素通过使用“innerHTML”属性。 IE不喜欢那样。

您可能需要做的是将整个<table>包装在一个虚拟<div>中,然后从HTML片段重建整个东西。

4

这将是:当你试图把某些节点内部的某些东西

$('tbody').html(html); 

IE抛出一​​个错误。例如

$('<input>').append('</p>') 

要解决此问题,请将html添加到其他元素。例如,你可以尝试:

$('table').html('<tbody>' + html + '</tbody>'); 
6

如果您在使用IE浏览器中的HTML5元素的时候得到这个错误,请确保您使用html5shim告诉IE,这些都是真正的元素。

+0

[Modernizr](http://modernizr.com)也可以使用,因为它包含[html5shim](http ://code.google.com/p/html5shiv/)。 – zacharydl 2013-07-26 18:07:16

0

我在使用HTML5元素的Web应用程序中遇到了此问题。当我将Modernizr脚本加入页面时,问题就解决了。

0

我有同样的问题。最初有一个选择列表正在追加到它。一路上选择被改为输入字段。试图将选项标签附加到输入字段似乎会使IE不高兴。

0

我现在有同样的问题。在我看来,它发生在不可见的元素上。验证您的元素在调用.html()时是否可见。

0

你是否设置了任何输入字段?

我有同样的问题,循环访问值的数组,但我已经将文本框更改为输入。铬只是忽略它,但IE 8爆炸。

$("#someID").html("someValue") =繁荣!在IE 8上,如果someID是输入

已经有val调用,但需要删除html。

$("#someID").val("someValue") =好

相关问题