Javascript IE错误:对方法或属性访问的意外调用
我有下面的代码,它在除IE之外的所有应用程序中都正常工作。它给了我一个对Jquery中的方法或属性访问的意外调用,我不知道如何调试它。我一直在使用IE开发者工具栏,它对这个错误毫无用处,只给了我第12行(在jquery脚本中) 非常感谢您的帮助: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
<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>');