Firefox总是加载动态图像,但IE只显示没有任何动态动作的图像。我需要做些什么改变?
来自IE查看源代码的JavaScript代码:
<script type=”text/javascript”
<!--/*--><![CDATA[/*><!--*/
if (document.getElementById("safeForm1d3").submitted.value == "false") {
document.getElementById("safeForm1d3").submitted.value = "true";
setTimeout('document.getElementById("safeForm1d3").submit()', 100);
}else{
document.getElementById("toHide").style.display="none";
}/*-->]]>*/
</script>
我正在使用Wicket框架,所以真正的java代码是:
static private class SafeSubmitBehaviour extends AbstractBehavior{
public void onRendered( Component component ) {
super.onRendered( component );
StringBuffer buffer = new StringBuffer(200);
buffer.append("<script type=\"text/javascript\" ><!--/*--><![CDATA[/*><!--*/\n");
buffer.append("if (document.getElementById(\"").append(component.getMarkupId()).append("\").submitted.value == \"false\") {\n");
buffer.append("document.getElementById(\"").append(component.getMarkupId()).append("\").submitted.value = \"true\";\n");
buffer.append("setTimeout('document.getElementById(\"").append(component.getMarkupId()).append("\").submit()', 100);\n}else{\n");
buffer.append("document.getElementById(\"toHide\").style.display=\"none\";\n}/*-->]]>*/</script>");
component.getResponse().write(buffer);
}
}
加载我的动态图片的html页面是:
<div id="toHide" class="pb-text-align-center">
<img style="display: inline" src="img/load.gif" />
<form wicket:id="safeForm" class="clearfix">
<input type="hidden" wicket:id="submitted" value="false" />
</form>
</div>
答案 0 :(得分:5)
因为setTimeout()
要求您的函数作为字符串或匿名函数传递:
setTimeout(function() { document.getElementById("safeFormec").submit(); }, 100);
答案 1 :(得分:3)
尝试将它们包装在一个函数中:
setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100);
答案 2 :(得分:3)
尝试这样的事情
setTimeout(function(){document.getElementById("safeForm9c").submit();}, 100);
在过去,setTimeout完成函数是字符串格式,但是现在我们以这种方式使用它。此外,这种方式可以在超时完成时执行更多操作。
答案 3 :(得分:3)
从你的行动中删除引号:
setTimeout(function() {
document.getElementById("safeForm4d").submit();
}, 3000);
答案 4 :(得分:3)
您是否尝试从此行的末尾删除函数调用括号?
document.getElementById("safeForm9c").submit()
即。这样做:
setTimeout(document.getElementById("safeForm9c").submit, 100)
你告诉IE在100毫秒的时间内调用submit()
的结果,而不是调用提交。
答案 5 :(得分:1)
解决了我的问题。可能对其他人有用:
答案:
HTML源代码:
<SCRIPT type="text/javascript">
var $ = jQuery.noConflict();
document.getElementById('toHide').style.display ="";
$('#toHide').doTimeout(1000, function() {
$('#toHide').find('#safeForm34').submit();
document.getElementById('myAnimatedImage').src = "../../img/load.gif";
});
</SCRIPT>
HTML:
<div id="toHide" class="pb-text-align-center">
<img src="img/load.gif" id='myAnimatedImage' style="margin-left: auto; margin-right: auto;"/>
<form wicket:id="safeForm" class="clearfix" />
</div>
答案 6 :(得分:1)
将其包含在头部
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
并且
static private class SafeSubmitBehaviour extends AbstractBehavior{
public void onRendered( Component component ) {
super.onRendered( component );
StringBuffer buffer = new StringBuffer(200);
buffer.append("<script type=\"text/javascript\" >\n");
buffer.append("var input = $(\"input[name='submitted']\");\n");
buffer.append("if (input.val() == \"false\") {\n");
buffer.append(" input.val(\"true\");\n");
buffer.append(" setTimeout(function(){ $(\"#").append(component.getMarkupId()).append("\").submit()}, 100);\n");
buffer.append("}\n");
buffer.append("else {\n $(\"#toHide\").hide();\n}");
component.getResponse().write(buffer);
}
}
应该呈现
var input = $("input[name='submitted']");
if (input.val() == "false") {
input.val("true");
setTimeout(function(){ $("#safeForm1d3").submit()}, 100);
}else{
$("#toHide").hide();
}
你会在哪里做$("#toHide").show();
?
答案 7 :(得分:1)
function setsubmit()
{
document.getElementById("safeFormec").submit();
}
setTimeout('setsubmit()',100);
答案 8 :(得分:1)
你能尝试做像
这样的事吗?setTimeout('document.getElementById("safeForm9c").submit()', 100);
可能setTimeout接受你想要作为字符串调用的东西,这样它就可以在超时后执行eval并运行脚本中的字符串。
答案 9 :(得分:1)
更改此
setTimeout(function() {
'document.getElementById("safeForm4d").submit()'
}, 3000);
为...
setTimeout(function() {
document.getElementById("safeForm4d").submit()
}, 3000);
答案 10 :(得分:0)
格式化你的初始帖子后,我想也许我找到了问题的一些来源。
试试这个:
if (!document.getElementById("safeForm4d").submitted.value) {
document.getElementById("safeForm4d").submitted.value = "true";
setTimeout(function() {
document.forms[0].submit(); // Alt: document.forms['MyFormName'].submit()
}, 3000);
} else {
document.getElementById("toHide").style.display="none";
}
答案 11 :(得分:0)
最后解决了我的问题,可能对其他人有用:
答案:
HTML源代码:
<SCRIPT type="text/javascript">
var $ = jQuery.noConflict();
document.getElementById('toHide').style.display ="";
$('#toHide').doTimeout(1000, function() {
$('#toHide').find('#safeForm34').submit();
document.getElementById('myAnimatedImage').src = "../../img/load.gif";
});
</SCRIPT>
HTML:
<div id="toHide" class="pb-text-align-center">
<img src="img/load.gif" id='myAnimatedImage' style="margin-left: auto; margin-right: auto;"/>
<form wicket:id="safeForm" class="clearfix" />
</div>
答案 12 :(得分:0)
试试这个:
<script type="text/javascript">
if (document.getElementById("safeForm4d").submitted.value == "false") {
document.getElementById("safeForm4d").submitted.value = "true";
setTimeout('document.getElementById("safeForm4d").submit()', 100);
} else {
document.getElementById("toHide").style.display="none";
}
</script>
答案 13 :(得分:0)
你在setTimeout事件中有引号:
setTimeout('document.getElementById("safeForm4d").submit()', 100);
按如下方式更改脚本:
<script type="text/javascript">
if (document.getElementById("safeForm4d").submitted.value == "false") {
document.getElementById("safeForm4d").submitted.value = "true";
if(Wicket.Browser.isIE()) {
setTimeout(document.getElementById("safeForm4d").submit(), 100);
} else {
setTimeout(document.getElementById("safeForm4d").submit(), 100);
}
} else {
document.getElementById("toHide").style.display="none";
}
</script>
答案 14 :(得分:0)
由于从一个页面更改为另一个页面,这将永远不会给您带来理想的效果 - 这将导致新页面开始加载后消息消失。这取决于许多因素,例如服务器响应的时间,用户计算机重新呈现新页面的速度。
如果你真的希望这种效果起作用,你应该使用ajax使用.serialize()
发送表单数据,用应该隐藏动画的响应覆盖当前页面。
要创建所需的效果,您必须使用ajax发布表单,然后将新HTML推送到DOM。
var $form = $('#formId');
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
data: $form.serialize(),
success: function(response) {
$('#loading').fadeOut(function() {
// Get only text from the body of the result
$('body').html($(response).find('body'));
});
}
});
这真的很酷,我觉得写得很脏。认真。您应该确保返回的响应不会转到:
您很可能只想将结果返回到查询,即提交的表单的搜索结果。在这种情况下,只需将结果包装在容器中.find('#container')
而不是.find('body')
答案 15 :(得分:0)
您可以尝试:
img style="display: inline" src="img/load.gif?salt=xxxx"
xxx :表示 - 整数的随机数。
也许,浏览器会缓存图像,因此不会重新绘制。或者您必须使用循环设置GIF图像。
答案 16 :(得分:0)
问题是时间100,即1/10秒。 IE将仅使用动态操作加载图像100毫秒,即1/10秒并停止。时间增加到3000,现在工作正常。
的setTimeout(函数(){ '的document.getElementById( “safeForm4d”)。提交()'}, 100);
FF或其他浏览器没有问题。
答案 17 :(得分:0)
setTimeout
函数抛出无效参数,因为无论调用什么
document.getElementById("safeFormec").submit()
返回(可能是某些错误消息)不是setTimeout
的有效参数,即它不能
被解析为函数或表达式。
对.submit()
的调用失败,因为没有为表单指定操作属性(<form action="somePage.php">
)。
您的意图可能不是在setTimeout
调用中进行提交,而是将提交函数作为值参数发送到setTimeout,以便在一段时间后执行。像这样:
setTimeout(document.getElementById("safeFormec").submit, 100);
请注意缺少的paranthesises。
答案 18 :(得分:0)
setTimeout(function (){ document.getElementById("safeForm").submit() } , 100);
检查JSFIDDLE处的工作示例。
注意 ::警告可能会令人恼火。
答案 19 :(得分:0)
两件事:
setTiemout()
的正确用法是:
setTimeout(function(){
document.getElementById("safeForm4d").submit();
}, 100);
您使用的检票口。 wicket:id
不是DOM知道的。你必须分配一个ID,并像使用表单一样使用它。
希望有所帮助。
答案 20 :(得分:0)
此:
setTimeout(function(){'document.getElementById("safeForm4d").submit()'}, 100);
不正确。你传递给“.setTimeout()”的函数什么都不做。而不是那样,尝试:
setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100);
不同之处在于不应该引用函数的实际内容。在那种状态下,你得到的是一个带有单个语句的函数,该语句是一个简单的字符串值表达式。它会运行,但没有效果。
答案 21 :(得分:0)
var safeForm4d = document.getElementById("safeForm4d");
if ( safeForm4d.submitted.value == "false" ){
safeForm4d.submitted.value = "true";
setTimeout(function(){ safeForm4d.submit(); }, 100);
}else{
document.getElementById("toHide").style.display="none";
}
答案 22 :(得分:0)
我尝试过添加函数调用,现在图像正在加载和动态,但它永远不会进入下一页或从不清除超时。
代码:
buffer.append("setTimeout(function(){'document.getElementById(\"").append(component.getMarkupId()).append("\").submit()'}, 100);\n}else{\n");