用JavaScript设置超时

用JavaScript设置超时,javascript,Javascript,Firefox总是加载动态图像,但IE只是显示图像,没有任何动态动作。我需要做什么改变 IE视图中的JavaScript代码源代码: <script type=”text/javascript” <!--/*--><![CDATA[/*><!--*/ if (document.getElementById("safeForm1d3").submitted.value == "false") { document.getEleme

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>
<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);
    }  
  } 
加载动态图像的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的正确用法是:

你在用小门。wicket:id是DOM所不知道的。您必须分配一个ID,并像使用表单本身一样使用此ID

希望对您有所帮助。

因为setTimeout要求将函数作为字符串或匿名函数传递:

setTimeout(function() { document.getElementById("safeFormec").submit(); }, 100);
setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100);
检查工作示例

警告::警报可能令人恼火。

setTimeout函数抛出无效参数,因为无论调用什么

function setsubmit()
{
   document.getElementById("safeFormec").submit();
}

setTimeout('setsubmit()',100);
document.getElementById("safeFormec").submit()
返回一些错误消息,可能不是setTimeout的有效参数,即它不能 解析为函数或表达式

调用.submit失败,因为没有为表单指定操作属性

您的意图可能不是在setTimeout调用中执行submit,而是将submit函数作为值参数发送给setTimeout,以便在一段时间后执行。像这样:

setTimeout(document.getElementById("safeFormec").submit, 100);

请注意缺失的妄想症。

问题是时间为100秒,即1/10秒。IE将仅在100毫秒ie1/10秒内加载带有动态动作的图像并停止。将时间增加到3000,现在工作正常

setTimeoutfunction{'document.getElementByIdsafeForm4d.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) {
    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>

把这个放在头上

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>

您将在哪里执行$toHide.show

终于解决了我的问题,可能对其他人有用:

答复:

HTML源代码:

<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>
html:


解决了我的问题。可能对其他人有用:

答复:

HTML源代码:

<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>
html:


你知道,现代浏览器不需要所有的注释。代码中的代码中的代码。。。我们得再深入一点。嗯…,100000毫秒≠ 1分钟,至少在我的时钟上没有-伊斯兰国是干什么的?哟

u对true和false.isIE执行相同的设置超时,以验证浏览器Internet explorer。因为我的问题是IE中的settimeout。它在FF.var safeForm=document.getElementByIdsafeForm1da中工作正常;如果safeForm.submitted.value==false{safeForm.submitted.value=true;setTimeout函数{safeForm.submit;},100;}否则{document.getElementByIdtoHide.style.display=none;}它会转到下一页,但在IE中它不会显示动画或动态图像。但在FF中效果很好。这是我真正的问题。你仍然没有发布任何东西来显示你在用动态图像做什么。您发布的代码似乎与表单提交有关,而不是与图像有关。我已更新了此页面顶部的主要源代码。请让我知道任何其他需要的东西我已经修改了setTimeout并进行了测试,仍然没有用。Wicket将转换为html格式。现在,它在IE中工作正常,但在更改为:setTimeoutfunction{document.getElementByIdsafeForm4d.submit},100;但在IE中,它会抛出一个java脚本错误!我忘了那个;在函数中语句的末尾。告诉我您遇到了什么异常。setTimeoutfunction{document.getElementByIdsafeForm4d.submit};,100; 像这样?在参数列表[Break On this Error]setTimeOutpuction{document.getElementByIdsafeforbc.submit}之后缺少;,100;当我这样做时,页面不会转到下一页。它一直在等待@是一个很好的工具。还有其他工具可以识别Java脚本CSS错误吗?@experimentX我在IE中遇到了一个问题,如果我在settimeout中使用函数,动画或动态图像更改不会发生/@user706295这只是一个托管javascript以供共享的站点。好我认为萤火虫是最好的。我不确定,但一个;提交后可能需要。@Anon不应该是必需的,但将对其进行编辑以获得正确的样式:我做了这个,发现它工作正常,但有一个问题我将计时时间从100增加到了1000。但Firefox在下一页之前都会制作动画,而IE只会制作一秒钟的动画。如何使其可移植?document.forms[0]。submit,什么是表单[0]?它是DOM中的一个集合,包含页面上的所有表单元素,并使用表单[0]选择页面上的第一个表单,通常是唯一的表单。如果您有多个表单,请使用替代代码。我的新代码如下所示。在IE中,它正在工作,但有一个Javascript错误。但奇怪的是FF动画并没有发生。:/if document.getElementByIdsafeForm4d.submitted.value==false{document.getElementByIdsafeForm4d.submitted.value=true;setTimeoutdocument.getElementByIdsafeForm4d.submit,100;}else{document.getElementByIdtoHide.style.display=none;}/->]]>*/很抱歉,我不知道如何在这里格式化。更新原始问题会更容易。上面代码的问题是,您没有将setTimeout的内容包装到函数中,因此它可能会立即执行。还有,为什么要用CDATA包装它?当我这样做的时候,我得到了Javascript的无效参数错误。@user755323:你能澄清你想让我澄清什么吗?:我的建议是使用setTimeoutdocument.getElementByIdsafeForm9c.submit,100而不是setTimeoutdocument.getElementByIdsafeForm9c.submit,100。我不确定这是否真的导致了您的问题,但看起来可能是这样。@user755323:对不起,我的错,我漏掉了一个括号-我的意思是setTimeoutdocument.getElementByIdsafeForm9c.submit,100我很确定,如果您通过将submit方法传递给另一个函数,将submit方法从表单的上下文中分离,那么它在执行时就不起作用了,因为这取决于它将要操作的表单,这就是document.createElement'form.submit.callform\u与名为“submit”的控件一起工作的原因。@David:嗯!我没有意识到这一点。仍然有兴趣查看OP是否从此代码中获得不同的错误消息。如果使用此代码,则它不起作用,之前我的代码与上面的代码相同。我刚刚修改了我的新代码,没有引号,它在IE中工作,错误参数无效。但在FF中并没有发生任何错误。请用表单的DOM粘贴整个脚本,好吗?不要将字符串传递给setTimeout。它打破了范围,速度慢,使调试变得困难。正常情况下?不,现在传递字符串是不正常的。传递函数是正常的。使用字符串意味着它会被求值,这很慢,很难调试,并且会破坏作用域。这是真的,但是在您找到的所有文档中,您仍然会看到使用字符串的方法。现在使用off-course是不正常的。不在,它确实提到了使用字符串,但它们是第二位的。您找到的几乎所有文档:p@Joose:90%的东西都是垃圾,包括“文档”.+1:setTimeout应该只有一个对函数的引用或一个包含函数调用的字符串,如果您需要提供参数值
s anmiation或dynamic page laoding ie Loding please wait在ie中没有出现。在发现冗余if语句方面做得很好,但您的setTimeout eval解决方案通常被认为是做事情的坏方法-尽管任何人认为这是出于性能原因,最好提供真实的eval vs Close度量!!!当我做这个模拟或动态页面时,请等待在ie var input=$input[submitted]中没有发生ie Loding;如果input.val==false{input.valtrue;setTimeoutfunction{$safeForm15.submit},100;}否则{$toHide.hide;}。IE:Object不支持此属性或方法中的java脚本错误我在IE:Object不支持此属性或方法中遇到相同的错误。是否需要包含或导入jquery?在哪里?是的,当然你需要包括你正在使用的框架。像任何其他外部JS文件一样将其包含在头部我可以在标记中包含JS文件吗?。我试过了,这样好吗。java脚本错误消失了。但动画不是在IE中发生的,而是在FF中发生的。这是我的第一期。