代码之家  ›  专栏  ›  技术社区  ›  Ke.

javascript ie错误:意外调用方法或属性访问

  •  20
  • Ke.  · 技术社区  · 15 年前

    我有下面的代码,它在除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 回复  |  直到 6 年前
        1
  •  8
  •   T.J. Crowder    15 年前

    我有点惊讶(抱怨),但这是件好事:你漏掉了 getPage 对于 hash (例如,放 var 在第一次使用之前)。

    在其他方面,它可能正在创建一个隐式全局(一个 window 对象调用 搞砸 ,这当然是 Bad Thing (TM),但据我所知,根据规范(相关章节为8.7[“参考 键入“]和10.1.4[“范围链和标识符解析”])。

    尽管如此,我还是很惊讶.它必须与jquery调用单击处理程序的作用域有关。

        2
  •  6
  •   Tamlyn    13 年前

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

        3
  •  4
  •   jjnguy Julien Chastang    13 年前

    它将是:

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

    当你试图将某些东西放入某些节点时,ie会抛出一个错误。如

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

    要解决此问题,请添加 html 一个不同的元素。例如,您可以尝试:

    $('table').html('<tbody>' + html + '</tbody>');
    
        4
  •  0
  •   Álvaro González    15 年前

    我找不到历史方法 jQuery API 所以我想要么是:

    • 第三方插件。
    • 对老好人的间接称呼 window.history 对象。
    • 您创建的自定义对象。

    我的猜测是ie(众所周知,通过使所有事情全球化来污染全球范围)认为 历史 实际上是指 窗口历史记录 而且越来越混乱了。如果是自定义对象,请尝试将其重命名为 我的历史 或者别的什么。

        5
  •  0
  •   Pointy    15 年前

    我想克劳德先生有点心事。从jquery源代码可以看出,如果返回的html片段不包含任何 <script> 标记,并且没有其他一些不太可能的特性,那么jquery可能正试图将其填充到 <tbody> 元素,方法是使用“innerHTML”属性。我不喜欢那样。

    你要做的就是把整个 <table> 假人 <div> 然后从你的html片段重建整个东西。

        6
  •  0
  •   Sam    12 年前

    我在一个使用html5元素的web应用程序中遇到了这个问题。当我把modernisr脚本包含到页面中时,问题就解决了。

        7
  •  0
  •   jhanifen    12 年前

    我也有同样的问题。最初有一个选择列表被附加到它上面。一路上,select被更改为一个输入字段。试图将选项标记附加到输入字段似乎使ie不高兴。

        8
  •  0
  •   Jovica Zaric    12 年前

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

        9
  •  0
  •   MattC Holger    11 年前

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

    我也有同样的问题,循环遍历一个值数组,但我已经将一个文本框更改为一个输入。chrome只是忽略了这一点,但ie 8会爆炸。

    $("#someID").html("someValue") =繁荣!如果有人输入

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

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