【问题标题】:Hide/Show Load function not working隐藏/显示加载功能不起作用
【发布时间】:2013-11-27 19:48:25
【问题描述】:

我有一个脚本,在用户提交表单后显示 2 个 div 并隐藏 1 个 div。表单的目标是同一页面上的 Iframe。

我想延迟隐藏/显示事件,直到加载 Iframe。我可以通过加载动画来做到这一点,但我不确定如何使用 Hide/Show 脚本来做到这一点。

该脚本与提交函数的工作方式如下:

$(function(){
    $('#form_710370').submit(function(e){
       e.preventDefault(); // add this
       $('#form_container').hide()
       $('#mydivhide1, #mydivhide2').show();
       return false;
    });
});

但是如果我尝试像这样使用加载功能,它不起作用,但它适用于我的加载动画,有什么建议可以说明我做错了什么吗?

$(document).ready(function () {
  $('#iframe1').load(function(){
  {
    $('#form_container').hide()
      $('#mydivhide1, #mydivhide2').show()
     });

这是有效的加载动画脚本

    $(document).ready(function () {
    $('#iframe1').on('load', function () {
    $('#loader1').hide();
        });
    });
    / in ready()
    $('#form_710370').submit(function(){$('#loader1').show();return true;});

这里是 HTML

<div id="mydivhide1">1111</div>
<div id="mydivhide2">2222</div>

<div id="form_container">
    <form id="form_710370"  target="iframe" method="post" convert.php">
        <input id="Website" name="url1" type="text" value=""/> 
        <input id="saveForm" type="submit" name="submit" value="submit" />
    </form> 
</div>

<div id="frameWrap">
<img id="loader1" src="ajax_loader_blue_512.gif" alt="loading gif"/>  
    <iframe id="iframe1" name="iframe1" src="page.html" > </iframe>
    </div>

这里是 CSS

#mydivhide1 {display:none;}
#mydivhide2 {display:none;}

【问题讨论】:

  • 一般来说,最好不要为表单本身 preventDefault() ,而是为表单的提交按钮执行此操作,另一方面,您的问题似乎可以通过以下方式轻松解决超时回调。
  • @JoseE 你能告诉我如何在投票中做到这一点吗?我刚学Jquery,以前没学过,谢谢
  • 我认为你可以先开始尝试这个答案:stackoverflow.com/questions/5788499/jquery-iframe-load-event

标签: javascript jquery html css iframe


【解决方案1】:

我认为您遇到的问题是您阻止表单提交到iframe,然后显示divs,但iframe 再也不会调用load,因为正在停止提交。

假设您想在提交表单时显示#mydivhide1#mydivhide2,然后在iframe 完成加载时隐藏它们,我想出了一个可以满足您需求的小提琴:http://jsfiddle.net/CST4t/3/

基本上我只是删除了e.preventDefault( );,而不是返回false,而是返回true,所以表单提交通过了。我还清理了一些项目,例如action 属性,并将submit 函数覆盖移动到$(document).ready( );

编辑

我做的另一件事是将form targetiframe 的名称更改为更常用的名称,似乎在更多浏览器中效果更好。显然,从浏览器到浏览器,名称和目标值真的很敏感,see this answer

【讨论】:

  • 感谢您的帮助,我刚刚检查了小提琴,是的,表单有效,但它没有完成脚本的要点。我想在加载后隐藏&lt;div id="form_container"&gt;,并在加载完成后打开另外两个#mydivhide1#mydivhide2
  • 啊,我误解了你问题的一部分。这个怎么样? jsfiddle.net/CST4t/4
  • 谢谢老哥,我认为这会起作用,现在将它添加到真实页面并测试它!
  • 没问题。我希望它适用于您的应用程序!
【解决方案2】:
$('#iframe1').contents().load(function() {
    //window loaded
});

【讨论】:

  • 感谢您的帮助,我试过了,但是当我将其更改为$('#iframe1').contents().load(function() { //window loaded });'
猜你喜欢
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 2012-12-29
相关资源
最近更新 更多