【问题标题】:jquery not proceeding to next pagejquery没有进入下一页
【发布时间】:2011-05-26 14:08:38
【问题描述】:

我有 jquery,但它不会进入下一页,它总是显示图像并等待,永远不会进入下一页。

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>

HTML 查看源代码:

<SCRIPT type="text/javascript">  
   var $ = jQuery.noConflict();  
   $('.toHide').show().doTimeout(100,function() { 
   $('.toHide').find('safeForma3').submit();});
</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 $ = jQuery.noConflict();\n "); 
          buffer.append(" $('.toHide').show().doTimeout(100,function() {  $('.toHide').find('");
          buffer.append(component.getMarkupId()).append("').submit();});\n</script>");
          component.getResponse().write(buffer);
        }  
  } 
      buffer.append(component.getMarkupId()).append("').submit();});\n</script>");

我尝试过:$('.toHide').find('form').submit();});。但是还是没用。

将 $('.toHide') 更改为 $('#toHide') 后,页面将转到下一页,但在 IE6/7 中没有出现动画,在 FF 中可以正常工作。

【问题讨论】:

  • 我怀疑问题出在 setTimeout 上。它在 IE 中运行良好。提供相同类型功能的库将使用 jQuery。此外,如果您提供最少的代码来重现仅 HTML/JS 的问题,您更有可能得到答案。
  • 你在 FF 中验证,你会得到差异
  • 我认为这与 jquery 无关。这似乎是css的问题。建议:将页面的这一部分保存在本地硬盘上(来自浏览器)并尝试显示图像。
  • 确认渲染的 wicket:id 和脚本是一样的。我发现确实存在component.getMarkupId() 在构造过程中返回不同值的情况。例如,构造函数中的getMarkupId()onBeforeRender() 中的getMarkupId() 不同。另外,我想你已经完成了component.setOutputMarkupId(true) ?

标签: javascript jquery wicket


【解决方案1】:

“toHide”&lt;div&gt; 具有该字符串,因为它是 id 值,而不是类,因此您需要:

 $('#toHide')

选择器“.toHide”在类中查找带有“toHide”的元素,因此根本找不到您的&lt;div&gt;

要查找表单,您可以使用

 $('#toHide form').submit();

【讨论】:

  • 你是对的,选择器'#toHide form'比使用选择器'#toHide'后跟find()更好。
  • $('#toHide').show().doTimeout(5000,function() { $('#toHide').find('safeform11').submit();}); .它适用于 IE 和 FF。但问题是 IE6/7 中没有发生动态动画。
  • 你在说什么“动态动画”?
  • admit.belgacom.be/WCE/ESW/selectBundle/productId/… click new customer-> 街道为rue maes,编号为20,邮编为1000。在FF中将显示带有动画的图像。但会显示相同的图像,但它在 IE 中没有动画。
  • 好吧,这听起来像是一个单独问题的好主题:-) 您应该发布尝试执行动画的代码。 (无论如何,我在 Chrome 中看不到任何“动画”。)
【解决方案2】:

我认为你应该试试这个:

$('#toHide').find('form').submit();

或者如果表单上有一个 ID(我不熟悉 Wicket),你可以使用:

$('#safeForm').submit();

ID 选择器使用“#”字符,而不是“.”,它是类选择器前缀。

【讨论】:

  • 当页面在浏览器中渲染时,表单的id是否为'safeForm'?正如我所提到的,我不知道 Wicket 是否真的创建了带有 ID 属性的表单。
  • 它可以工作,但在 IE 中没有出现动画。但在FF中工作正常。这里与检票口无关。
  • 确保您使用的是下面@Dancrumb 的建议,然后查看此链接:stackoverflow.com/questions/445850/…
【解决方案3】:

在您的 HTML 中没有名为“safeForm15”的 id,这是您的 setTimeout 试图选择的。事实上,表单有命名空间的 ID,我认为这是非法的。

无论如何,快速解决方法是提示“toHide”,并去掉 component.getMarkupId 位。

$('#toHide').find('form').submit();

添加:

你需要改变这个:

  buffer.append("  setTimeout(function(){ $(\"#").append(component.getMarkupId()).append("\").submit()}, 100);\n"); 

到这里:

  buffer.append("  setTimeout(function(){$('#toHide').find('form').submit();}, 100);\n"); 

【讨论】:

  • 这就是你渲染的 HTML 代码的样子吗?您只是发布模板而不是输出吗?反正也无所谓。只要 'toHide' 是唯一的,我建议的代码无论如何都可以工作。
  • 我改变了,现在动态页面加载在 IE 中工作,但在 FF 中不工作?修改后的代码是:buffer.append(" $('#toHide').find(\"#").append(component.getMarkupId()).append("\").submit();\n");
  • 不,您不需要 component.getMarkupID。只是 buffer.append 我的行逐字逐句。
  • 错误...不是逐字记录。您仍然需要将其包装在 setTimeout 中。我会更新我的回应。
  • 不,它适用于 IE 而不是 FF。代码:buffer.append(" $('#toHide').find('form').submit();\n");
【解决方案4】:

这是 IE 的问题,如果您有一个不可见的 GIF,然后将其设置为可见,则动画不起作用。

最好的办法就是使用像 &lt;img src='' /&gt; 这样的空图像标签,然后当您希望它可见时,将 src 设置为正确的路径,即 &lt;img src='AnimatingImg.gif' /&gt;

如果你这样做,它应该可以工作。

编辑

你可以这样做:

<SCRIPT type="text/javascript">  
   var $ = jQuery.noConflict();       
   $('#toHide').show();
   $('#loadingImg').attr('src', 'img/load.gif');
   setTimeout(function() {
       $('#toHide').find('safeForma3').submit();
   }, 100);
</SCRIPT>

html代码:

<div id="toHide" class="pb-text-align-center">
    <img id="loadingImg" style="display:inline" src="" />
    <form wicket:id="safeForm" class="clearfix">
        <input type="hidden" wicket:id="submitted" value="false" />
    </form>
</div>

尝试一下,不过可能需要一些摆弄。

【讨论】:

  • 我试过了,页面永远不会转到下一页并且图像不显示。
  • 它应该,你将不得不玩它,我查看了你网站上的 html,但无法理解它 - 每个元素似乎都包含在一个 div 中!
【解决方案5】:

其他人提到了您的选择器的问题。

不过,这段代码也出现在两个script 标记之间。这意味着它们将在解析后立即执行。这意味着它们可以在整个 DOM 加载之前执行,从而使它们失效。

你需要使用这样的东西:

<SCRIPT type="text/javascript">  
   var $ = jQuery.noConflict();  
   $(document).ready(function(){
       $('#toHide').show().doTimeout(100,function() { 
           $('#safeForma3').submit();
       });
   });
</SCRIPT>

【讨论】:

  • 我已修改但出现 javascript 错误:#toHide".show 不是函数。我使用 $('#toHide') 而不是 $('.toHide')。准备好应该在end? ie 上面代码中的内容是 })); 或修改你的代码。
  • 好收获。使用 .ready() 比依赖超时/延迟更好。
猜你喜欢
  • 1970-01-01
  • 2016-07-28
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多