我有以下代码,它在除了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等中运行良好。
答案 0 :(得分:8)
我有点惊讶IE抱怨它,但这是一件好事:你在getPage
遗漏了hash
的声明(例如,放入var
第一次使用的前面)。
在其他人身上,它可能会创建一个隐式全局(window
对象的属性hash
),当然是Bad Thing(tm),但据我所知根据规范是正确的(相关部分是8.7 [“参考文献”
输入“]和10.1.4 [”范围链和标识符解析“])。
答案 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找不到历史方法所以我认为它是:
我的猜测是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")
=好