MSIE:jQuery';s append()/html()不起作用,求助于getElementById().innerHTML
这是一个很长的 前提 他被叫去帮助一个客户修复他们当前项目中的一些错误。需要修复的是一个作业列表页面。您有一个作业列表,单击其中一个,如果激活了JavaScript,就会发出一个AJAX调用,将作业的详细信息动态加载到现有元素(DIV#emploi_details)中。如果没有激活JS,它只需重新加载包含作业详细信息的页面(不太重要) 我跳上他们的实验室服务器去开发网站 问题 基本上,IE7(起初)没有显示通过$().load()加载的内容。IE6在innerHTML中工作顺利。请求被发送,我每次都得到回复。我收到数据,我可以提醒它并看到它,但实际的内容转储不起作用。Safari,Firefox,没问题。我正在加载信息的DIV#emploi#u details元素有一个CSS显示:none;在样式表中,并在加载内容后显示(其他不太重要的细节)MSIE:jQuery';s append()/html()不起作用,求助于getElementById().innerHTML,jquery,internet-explorer,append,innerhtml,getelementbyid,Jquery,Internet Explorer,Append,Innerhtml,Getelementbyid,这是一个很长的 前提 他被叫去帮助一个客户修复他们当前项目中的一些错误。需要修复的是一个作业列表页面。您有一个作业列表,单击其中一个,如果激活了JavaScript,就会发出一个AJAX调用,将作业的详细信息动态加载到现有元素(DIV#emploi_details)中。如果没有激活JS,它只需重新加载包含作业详细信息的页面(不太重要) 我跳上他们的实验室服务器去开发网站 问题 基本上,IE7(起初)没有显示通过$().load()加载的内容。IE6在innerHTML中工作顺利。请求被发送,我每
show\u emploi=函数(id,成功id)
{
$('emploi_details')。淡出(800,函数(){
变量$$=$(此);
$$.load('emploi_uu.php',{job_udetails:1,ajax:1,id:id,suc:suc_uid,random:(new Date().getTime())},函数(数据,状态){
if(isIE6)document.getElementById('emploi_details')。innerHTML=data;
$$.show();
});
$('#bgContent').fadeOut();
});
}
解决方案
起初我的印象是,$().load()可能只是出了问题,所以我将它改为$.get(),以便更好地控制加载内容的操作
$.get('emploi_<?php echo $data['lang']; ?>.php', { job_details: 1, ajax: 1, id: id, succ: succ_id, random: (new Date().getTime()) }, function(data, status){
$$.empty().append(data).show();
});
$.get('emploi_uu.php',{job_udetails:1,ajax:1,id:id,suc:suc_uid,random:(new Date().getTime())},函数(数据,状态){
$$.empty().append(data.show();
});
这很有效。在所有浏览器中,包括IE6和IE7。没问题。很奇怪,但是你知道如果它有效并且是完全可靠的,不要问问题
情节扭曲
这就是狗屎变怪的地方。我认为错误已经修复,并将解决方案应用到了实时网站上。。。它不起作用。我就是不喜欢。在尝试了$.ajax和所有其他类型的东西后,我感到困惑,最终在live网站上使用了以下内容:
$.get('emploi_<?php echo $data['lang']; ?>.php', { job_details: 1, ajax: 1, id: id, succ: succ_id, random: (new Date().getTime()) }, function(data, status){
document.getElementById('emploi_details').innerHTML = data;
$$.show();
});
$.get('emploi_uu.php',{job_udetails:1,ajax:1,id:id,suc:suc_uid,random:(new Date().getTime())},函数(数据,状态){
document.getElementById('emploi_details')。innerHTML=数据;
$$.show();
});
而且它可以在所有浏览器上运行,因为没有什么比barebones JS更能完成任务了。当然,此修复程序也适用于开发人员网站
“待续”
在嵌入内容的功能中,有一点并不是针对所有浏览器(显然是服务器)的
总而言之,我的问题是WTF的问题。我不明白为什么一个在一边工作,而另一边却不工作,甚至不明白为什么一开始它就不能正常工作($().load())。很明显,jQuery版本(1.2.6)并没有什么不同,因为验证框架版本是我的第一反应
不管怎样,我觉得很有趣
希望斯塔克兰的人能得到上帝赐予的答案
谢谢我想你一定要去。以下是一些可能的故障点:
- jQuery.clean:生成添加到DOM中的片段的函数 如果doctype不正确,或者如果响应HTML在某些方面有缺陷,则可能出现这种情况 使clean函数失败的方法,因此没有任何东西可以插入DOM
- jQuery.fn.append:将呈现的响应片段添加到DOM中
比方说,因为jQuery使用appendChild而不是appendChild向DOM添加内容
innerHTML,一个错误导致IE不知道DOM已经更改并且没有呈现
信号改变了。当您使用innerHTML时,这将被忽略
您的问题不清楚您是否验证了注入的HTML确实是正确的
那里这可以通过以下方式进行测试:
$$.empty().append(data); alert( $$.parent()[0].innerHTML ); $$.show();
- jQuery.fn.show():显示结果
你的问题不清楚最终的失败是否是因为内容
没有被放入DOM中,或者只是没有被显示?如果
容器有填充物和背景,你们看到了吗
show函数比仅仅在屏幕上添加
更复杂 元素。如果它认为该元素是隐藏的,它将不会显示该元素,即有时可能会显示该元素 有奇怪的想法。将show()替换为手动设置display是否会更改 有什么事吗.style.display='block'
在任何情况下,您都应该准备一个简化的测试用例,其中只包含复制此bug所需的基本需求。即使您没有找到一种您满意的治疗方法,测试用例也应该随您的邮件一起发送。我已经解开了这个谜!这是我的问题的一个有效例子。 诀窍是在第一次成功后调用另一个AJAX,这将以某种方式覆盖innerHTML的问题。 谢谢你们帮我找到了正确的方向 我希望这将帮助一些人,因为到目前为止,我还没有看到一个有效的解决方案。 我还将联系jQuery以获取以下信息:P
$.ajax({
url:'modifyarticle.php',
type:'POST',
data:{
id:this.id,
article:'something',
mode:'single',
action:'delete'},
cache:false,
success:function(msg) {
alert(msg);$.ajax({
url:'getall.php',
type:'GET',
cache: false,
success: function(data) {
$('#output').html(data);
}
});
}});
敬礼感谢您的详细回复。事实上,我忘了提到我在将内容附加到DOM之后执行了测试(您建议的警报调用),IE会显示元素为空。我也尝试过不使用jQuery.fn.show()(它只是在左侧添加了一个虚线边框),并在默认情况下保持元素的显示,但仍然没有内容可以显示
$.ajax({
url:'modifyarticle.php',
type:'POST',
data:{
id:this.id,
article:'something',
mode:'single',
action:'delete'},
cache:false,
success:function(msg) {
alert(msg);$.ajax({
url:'getall.php',
type:'GET',
cache: false,
success: function(data) {
$('#output').html(data);
}
});
}});