【问题标题】:Javascript IE error: unexpected call to method or property accessJavascript IE 错误:对方法或属性访问的意外调用
【发布时间】:2011-01-21 23:23:53
【问题描述】:

我有以下代码,它在除 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 等中运行良好。

【问题讨论】:

    标签: javascript jquery internet-explorer methods


    【解决方案1】:

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

    我遇到了同样的问题,循环遍历一组值,但我已将文本框更改为输入。 Chrome 只是忽略它,但 IE 8 崩溃了。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            【解决方案6】:

            它将是:

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

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

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

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

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

            【讨论】:

              【解决方案7】:

              我认为克劳德先生正在做某事。据我从 jQuery 源代码得知,如果您返回的 HTML 片段不包含任何 &lt;script&gt; 标记,并且没有其他一些不太可能的特征,那么 jQuery 可能正在尝试填充它使用“innerHTML”属性进入您的&lt;tbody&gt; 元素。 IE 不喜欢这样。

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

              【讨论】:

                【解决方案8】:

                我在jQuery API 中找不到历史记录方法,所以我认为是:

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

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

                【讨论】:

                • 我做了这一切,这个历史插件似乎有点坏了。 url 中超过 50 个字符也有问题,我想我将不得不找到另一种方式,无论如何欢呼:)
                【解决方案9】:

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

                在其他方面,它可能正在创建一个隐式全局(window 对象的属性,称为hash),当然是Bad Thing(tm),但据我了解,根据规范它是正确的(相关部分是 8.7 ["The Reference Type"] 和 10.1.4 ["Scope Chain and Identifier Resolution"])。

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

                【讨论】:

                • ive 将其缩小到 tbody 标签。知道为什么这会导致问题吗? IE 不能识别这个标签吗? PS Thx 你提到的事情也是对的
                • @Ke:IE 识别tbody 标签,是的。我刚刚意识到你在做$('tbody').html(html)——你的真的想把这个内容写给页面上的每个tbody吗?你写的 HTML 是什么?大概是一系列tr 元素...... IE 不太喜欢你通过innerHTML 处理表格行,但我认为 jQuery 正在为你处理这些(原型可以,我不认为 jQuery 更落后在那个领域,但我不太了解 jQuery)。
                猜你喜欢
                • 2010-12-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-04-25
                • 1970-01-01
                • 2012-08-13
                相关资源
                最近更新 更多