Javascript IE错误:意外调用方法或属性访问
我有以下代码,它在除了IE之外的所有东西中工作(像往常一样)。 它让我在Jquery中意外调用方法或属性访问,我不知道如何调试它。 我一直在使用IE开发人员工具栏,这对于这个错误没用,只给了我一行12号(在jquery脚本里面)。
非常感谢任何帮助:
$(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); } }); }
这是历史插件: http : //plugins.jquery.com/project/history
这是我一直关注的演示: http : //plugins.jquery.com/project/history
仍然将window.location改回document.location似乎没有什么区别
我迷失在这一个。 当我更改标签时,我正在调用它确实发布,所以它正在工作,但在IE中,设计全部被破坏,我点击的下一个链接不发布。 真奇怪!! 在firefox,opera等中运行良好。
我有点惊讶IE抱怨它,但这是一件好事:你在getPage
缺少一个getPage
(例如,在第一次使用前放置var
)。
在其他的情况下,它可能会创建一个隐式全局( window
对象的属性称为hash
),这当然是一件坏事 (tm),但据我所知它根据规范是正确的(相关部分是8.7 [“参考类型“]和10.1.4 [”范围链和标识符解析“])。
尽管IE仍在抱怨,但仍然感到惊讶。 它必须与jQuery调用单击处理程序的范围有关。
如果在IE中使用HTML5元素时出现此错误,请确保使用html5shim告诉IE这些是真实元素。
它将是:
$('tbody').html(html);
当您尝试将某些内容放入某些节点时,IE会抛出错误。 例如
$('').append('')
要解决此问题,请将html
添加到其他元素。 例如,您可以尝试:
$('table').html('' + html + '');
我在jQuery API中找不到历史方法,所以我认为它是:
- 第三方插件。
- 间接调用好的旧window.history对象。
- 您创建的自定义对象。
我的猜测是IE(众所周知通过使一切全局污染全球范围)认为对历史的任何引用实际上意味着window.history并且它变得混乱。 如果它是自定义对象,请尝试将其重命名为myHistory或其他任何内容。
我认为克劳德先生正在做些什么。 据我所知,从jQuery源代码中,如果你返回的HTML片段不包含任何标签,并且没有其他一些不太可能的特性,那么jQuery可能会尝试填充它使用“innerHTML”属性进入
元素。 IE不喜欢这样。
您可能需要做的是将整个
包装在一个虚拟
,然后从HTML片段重建整个事物。
我在使用HTML5元素的Web应用程序中遇到此问题。 当我将Modernizr脚本包含在页面中时,问题就解决了。
我有同样的问题。 最初有一个选择列表附加到它。 在此过程中,选择被更改为输入字段。 尝试将选项标记附加到输入字段似乎使IE不满意。
我现在遇到了同样的问题。 在我看来,它发生在不可见的元素上。 validation您的元素在调用.html()
时是否可见。
你在设置任何输入字段吗?
我有同样的问题,循环遍历值数组,但我已经将文本框更改为输入。 Chrome只是忽略它,但IE 8爆炸了。
$("#someID").html("someValue")
=繁荣! 在IE 8上,如果someID是输入
已经有val调用,但需要删除html。
$("#someID").val("someValue")
=好