我有一个页面,其中包含一个元素<displayedimage>
,在IE 6和IE 8中使用jquery的document.ready / $。getJSON函数进行更新(即使我没有,也可能是IE 7)测试)。同样的功能在XP Safari和OS X Safari,OS X Chrome,OS X Opera等上运行良好。所以,这是发生的事情:
我有一个元素,在第一次加载时是空的,但是由document.ready执行的javascript方法填充:
<div id="imagecontrol">
<displayedimage></displayedimage>
</div>
更新:
function loadFirstImage() {
$.getJSON("/servlet/access/image/" + id,
function(json) {
$("displayedimage").html("<a href=\"/servlet/images/" + json.images[0].filename + "\"><img src=\"/servlet/images/s_" + json.images[0].filename + "\"></img></a>");
$("imagelabel").html(json.images[0].label);
});
}
如前所述,此系统在OS X Safari,OS X Chrome,OS X Opera,XP Safari中运行良好,但在XP IE中似乎没有任何作用。我在loadFirstImage方法中执行了简单的调试(alert(“loadFirstImage called”),它给了我一个警告,所以看起来它可能是一些.getJSON问题?有关从哪里开始这样的建议吗?谢谢。
答案 0 :(得分:2)
使用任意DOM元素名称可以解决这类问题和不一致。
为什么不简单地使用标准元素,例如div
或span
?:
<div id="imagecontrol">
<div id="displayedimage"></div>
</div>
在$.getJSON
回调中,您可以设置内容:
$("#displayedimage").html(/*...*/);
浏览器将接受任何标记,即使它不是合法的HTML。这样,这意味着浏览器将尝试猜测关于可能的含义。这可能会导致出现与您现在相同的浏览器兼容性问题,因为我建议您validate添加标记。
答案 1 :(得分:0)
尝试使用sematics
<div id="imagecontrol">
<div id="displayedimage"></div>
</div>
JS
$.getJSON("/servlet/access/image/" + id,
function(json) {
$("#displayedimage").html("<a href=\"/servlet/images/" + json.images[0].filename + "\"><img src=\"/servlet/images/s_" + json.images[0].filename + "\"></img></a>");
});
答案 2 :(得分:0)
由于您使用的是自定义标记,您是否根据IE的需要明确创建了这些标记?将其放在您网页的head
中:
<!--[if IE]>
<script type="text/javascript" charset="utf-8">
document.createElement('displayedimage');
document.createElement('imagelabel');
</script>
<![endif]-->
对于记录:我同意您应该坚持使用有效标记的其他答案,否则您可能会在以后遇到名称冲突。
答案 3 :(得分:0)
另请注意如果在同一页面上多次调用$.getJSON
(可能是因为按钮点击或类似情况),则IE 7/8中的 您的数据将不会更新,因为默认情况下IE会缓存ajax请求(例如Chrome和FF不会这样做)。
解决方案是使用 $.ajax
方法( $.getJSON
是 $.ajax
):
$.ajax({
url: 'JSON_SOURCE_URL',
dataType: 'json',
cache: false, // 'cache: false' must be present for IE 7 & 8
success: function(data) {
// do your thing with 'data'
}
});