Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用JavaScript设置超时_Javascript - Fatal编程技术网

用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);
    }  
  } 
静态私有类安全提交行为扩展了抽象行为{
已渲染的公共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);
    
  • 你在用小门。wicket:id是DOM所不知道的。您必须分配一个ID,并像使用表单本身一样使用此ID

  • 希望有帮助。

    因为
    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>