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

时间:2010-02-28 08:52:29

标签: javascript jquery internet-explorer methods

我有以下代码,它在除了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>

以下是历史插件:http://plugins.jquery.com/project/history

以下是我一直关注的演示: http://plugins.jquery.com/project/history

仍然将window.location更改回document.location似乎没有什么区别

我迷失了这个。当我更改标签时,我正在调用它确实发布,所以它正在工作,但在IE中,设计全部被破坏,我点击的下一个链接不发布。真奇怪!!在firefox,opera等中运行良好。

9 个答案:

答案 0 :(得分:8)

我有点惊讶IE抱怨它,但这是一件好事:你在getPage遗漏了hash的声明(例如,放入var第一次使用的前面)。

在其他人身上,它可能会创建一个隐式全局(window对象的属性hash),当然是Bad Thing(tm),但据我所知根据规范是正确的(相关部分是8.7 [“参考文献” 输入“]和10.1.4 [”范围链和标识符解析“])。

然而,IE仍在抱怨它仍然感到惊讶。它必须与jQuery调用点击处理程序的范围有关。

答案 1 :(得分:6)

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

答案 2 :(得分:4)

这将是:

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

当您尝试将某些内容放入某些节点时,IE会抛出错误。例如

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

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

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

答案 3 :(得分:0)

我在jQuery API找不到历史方法所以我认为它是:

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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

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

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

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