Javascript IE错误:对方法或属性访问的意外调用

Javascript IE错误:对方法或属性访问的意外调用,javascript,jquery,internet-explorer,methods,Javascript,Jquery,Internet Explorer,Methods,我有下面的代码,它在除IE之外的所有应用程序中都正常工作。它给了我一个对Jquery中的方法或属性访问的意外调用,我不知道如何调试它。我一直在使用IE开发者工具栏,它对这个错误毫无用处,只给了我第12行(在jquery脚本中) 非常感谢您的帮助: <script type="text/javascript"> $(document).ready(function () { $.history.init(pageload); $('a[href=' + window

我有下面的代码,它在除IE之外的所有应用程序中都正常工作。它给了我一个对Jquery中的方法或属性访问的意外调用,我不知道如何调试它。我一直在使用IE开发者工具栏,它对这个错误毫无用处,只给了我第12行(在jquery脚本中)

非常感谢您的帮助:

<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>

$(文档).ready(函数(){
$.history.init(页面加载);
$('a[href='+window.location.hash+']').addClass('selected');
$('a[rel=ajax]')。单击(函数(){
var hash=this.href;
hash=hash.replace(/^..#/,“”);
$.history.load(散列);
$('a[rel=ajax]')。removeClass('selected');
$(this.addClass('selected');
$('.loading').show();
getPage();
返回false;
});
});
函数页面加载(散列){
if(hash)getPage();
}
函数getPage(){
hash=document.location.hash;
hash=hash.replace(/^..#/,“”);
变量数据='page='+encodeURIComponent(散列);
$.ajax({
url:“index.php”,
类型:“POST”,
数据:数据,
cache:false,
成功:函数(html){
$('.loading').hide();
$('tbody').html(html);
}
});
}
以下是历史插件:

下面是我一直关注的演示:

仍在将window.location更改回document.location似乎没有什么不同


我在这件事上迷路了。当我改变标签时,我打电话给它,它会发布,所以它会工作,但在IE中,设计都被破坏了,我点击的下一个链接不会发布。真奇怪!!在firefox、opera等浏览器中运行良好。

我有点惊讶IE会抱怨它,但它确实是一件好事:你在
getPage
中缺少
哈希
的声明(例如,将
var
放在第一次使用之前)

在其他方面,它可能创建了一个隐式全局(名为
散列
窗口
对象的属性),这当然是一个(tm),但据我所知,根据规范(相关章节为8.7[“参考”)它是正确的 键入“]和10.1.4[“范围链和标识符解析”])


尽管如此,我还是很惊讶艾莉在抱怨这件事。它必须与jQuery调用您的单击处理程序的作用域有关。

我在中找不到历史记录方法,因此我假定它是:

  • 第三方插件
  • 对好的旧对象的间接调用
  • 您创建的自定义对象

我的猜测是,IE(因将所有事物全球化而污染全球范围而闻名)认为任何对历史的引用实际上都意味着窗口。历史,它正在变得混乱。如果是自定义对象,请尝试将其重命名为myHistory或其他任何内容。

我想Crowder先生有什么想法。从jQuery源代码中可以看出,如果返回的HTML片段不包含任何
标记,并且没有其他一些不太可能的特征,那么jQuery可能正试图使用“innerHTML”属性将其填充到
元素中。我不喜欢那样

您可能需要做的是将整个
包装在一个虚拟
中,然后从HTML片段重建整个内容。

它将是:

$('tbody').html(html);
当您试图将某些内容放入某些节点时,IE会抛出一个错误。乙二醇

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

如果在IE中使用HTML5元素时出现此错误,请确保使用html5shim告诉IE这些是真实元素。

我在使用HTML5元素的web应用程序中遇到此问题。当我将Modernizer脚本包含到页面中时,问题就解决了。

我也遇到了同样的问题。最初,有一个选择列表被附加到它。在此过程中,select被更改为输入字段。尝试将选项标记附加到输入字段似乎会让IE不高兴。

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

是否设置了任何输入字段

我也有同样的问题,在一个值数组中循环,但我已经将一个文本框更改为一个输入。Chrome只是忽略了它,但IE 8爆炸了

$(“#someID”).html(“someValue”)
=boom!在IE 8上,如果someID是输入

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


$(“#someID”).val(“someValue”)
=good

我把范围缩小到了tbody标签。你知道为什么这会引起问题吗?我认不出这个标签吗?PS Thx关于你提到的事情你是对的well@Ke:IE识别
t车身
标记,是。我刚刚意识到你在做
$('tbody').html(html)
——你真的想把这些内容写到页面上的每个
tbody
?你写的HTML是什么?可能是一系列的
tr
元素。。。IE不太喜欢你通过
innerHTML
处理表行,但我认为jQuery正在为你处理这些(Prototype确实如此,我不认为jQuery在这方面更落后,但我不太了解jQuery)。我做了所有这些,而这个历史插件似乎有些崩溃。在url中还有50多个字符的问题,我想我必须找到另一种方法,干杯:)也可以使用,因为它包含。
$('table').html('<tbody>' + html + '</tbody>');