用JavaScript设置超时
Firefox总是加载动态图像,但IE只是显示图像,没有任何动态动作。我需要做什么改变 IE视图中的JavaScript代码源代码:用JavaScript设置超时,javascript,Javascript,Firefox总是加载动态图像,但IE只是显示图像,没有任何动态动作。我需要做什么改变 IE视图中的JavaScript代码源代码: <script type=”text/javascript” <!--/*--><![CDATA[/*><!--*/ if (document.getElementById("safeForm1d3").submitted.value == "false") { document.getEleme
<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>
<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>
<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>
]>*/
我使用的是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);
}
}
静态私有类安全提交行为扩展了抽象行为{
已渲染的公共void(组件){
super.onRendered(组件);
StringBuffer=新的StringBuffer(200);
buffer.append(“]]>*/”;
component.getResponse().write(缓冲区);
}
}
加载动态图像的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>
您可以尝试:
img style="display: inline" src="img/load.gif?salt=xxxx"
xxx:表示一个整数的随机数
也许,浏览器会缓存图像,使其不会重新绘制。或者您必须使用循环设置GIF图像。我尝试过添加函数调用,现在图像正在加载和动态,但它从未进入下一页或清除超时 代码: 这: 这是不正确的。传递给“.setTimeout()”的函数将不起任何作用。与其这样,不如试试:
setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100);
区别在于不应该引用函数的实际细节。在这种状态下,您得到的是一个具有单个语句的函数,该语句是一个简单的字符串值表达式。它会运行,但没有效果。两件事:
setTiemout()
的正确用法是:
setTimeout(function(){
document.getElementById("safeForm4d").submit();
}, 100);
setTimeout()
要求函数作为字符串或匿名函数传递:
setTimeout(function() { document.getElementById("safeFormec").submit(); }, 100);
setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100);
检查工作示例
小心::警报可能令人恼火。函数会抛出无效参数,因为无论调用什么
function setsubmit()
{
document.getElementById("safeFormec").submit();
}
setTimeout('setsubmit()',100);
document.getElementById("safeFormec").submit()
返回值(可能是一些错误消息)不是setTimeout
的有效参数,即它不能
解析为函数或表达式
调用.submit()
失败,因为没有为表单指定操作属性(
)
您的意图可能不是在setTimeout
调用中进行提交,而是将提交函数作为值参数发送给setTimeout,以便在一段时间后执行。像这样:
setTimeout(document.getElementById("safeFormec").submit, 100);
请注意缺失的妄想症。问题是时间为100秒,即1/10秒。IE将仅在100毫秒ie1/10秒内加载带有动态动作的图像并停止。将时间增加到3000,现在工作正常 setTimeout(函数(){'document.getElementById(“safeForm4d”).submit()}, 100);
FF或其他浏览器没有问题。删除您的操作中的引用:
setTimeout(function() {
document.getElementById("safeForm4d").submit();
}, 3000);
在格式化了你最初的帖子之后,我想也许我找到了一些问题的根源
- 超时中的函数是一个字符串
- 您应该尝试提交表单,而不是实际的按钮
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";
}
<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>
改变这个
setTimeout(function() {
'document.getElementById("safeForm4d").submit()'
}, 3000);
到
这永远不会给你想要的效果,因为你的从一页换到另一页——这将导致信息在新页面开始加载后消失。这将取决于许多因素,例如服务器响应所需的时间,以及用户计算机重新呈现新页面的速度 如果您确实希望这种效果起作用,那么应该使用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'));
});
}
});
这是真的很黑,虽然我觉得写这肮脏。认真地您应该确保返回的响应不会转到:
- 重新加载CSS样式、脚本等
- 与该页面和搜索相关的任何特定标题、脚本、样式等都不会显示或更改
您很可能只是想将结果返回到查询,即提交表单的搜索结果。在这种情况下,只需将结果包装在一个容器中,
.find(“#container”)
而不是.find('body')
您是否尝试过从此行末尾删除函数调用括号
document.getElementById("safeForm9c").submit()
i、 e.改为:
setTimeout(document.getElementById("safeForm9c").submit, 100)
您告诉IE在100毫秒内调用
submit()
的结果,而不是调用submit。您可以尝试执行以下操作吗
setTimeout('document.getElementById("safeForm9c").submit()', 100);
setTimeout可能会将您要调用的内容作为字符串接受,这样它就可以在超时后进行评估,并在遇到字符串时运行脚本。尝试类似的方法
setTimeout(function(){document.getElementById("safeForm9c").submit();}, 100);
在过去,setTimeout complete函数是字符串格式的,但现在我们是这样使用它的。此外,这种方法还可以在超时完成时执行更多操作。尝试将它们包装到函数中:
setTimeout(function() { document.getElementById("safeFormec").submit(); }, 100);
setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100);
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>
if(document.getElementById(“safeForm4d”).submitted.value==“false”){
document.getElementById(“safeForm4d”).submitted.value=“true”;
if(Wicket.Browser.isIE()){
setTimeout(document.getElementById(“safeForm4d”).submit(),100);
}否则{
setTimeout(document.getElementById(“safeForm4d”).submit(),100);
}
}否则{
document.getElementById(“toHide”).style.display=“无”;
}
试试这个:
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";
}
<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>
if(document.getElementById(“safeForm4d”).submitted.value==“false”){
document.getElementById(“safeForm4d”).submitted.value=“true”;
setTimeout('document.getElementById(“safeForm4d”).submit()',100);
}否则{
document.getElementById(“toHide”).style.display=“无”;
}
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();
}
<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>
<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>
<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>
<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>