在父页面中调用JQuery显示/隐藏id

时间:2011-12-22 16:27:02

标签: jquery-selectors wicket

我试图让这个工作,在Wicket renderHead方法中,参数IHeaderResponse响应传递一个javascript,分别显示隐藏调用父页面中的链接。 这是通过Apache Tomcat服务器提供的移动Web应用程序的一部分。

StartPage.html,(调用父页面,隐藏/显示链接的位置)

<li class="ui-block-e">
    <a wicket:id="logoutlink" id="logout" href="#" data-theme="a" class="ui-btn-corner-   all ui-btn ui-btn-up-a ui-btn-icon-top">
        <span class="ui-btn-inner ui-btn-corner-all">
        <span class="ui-btn-text">Logga ut</span>
        <span class="ui-icon ui-icon-custom"></span>
           </span>
<a wicket:id="loginlink" id="login" href="/domain/mobile/login" data-theme="a"    class="ui-btn-corner-all ui-btn ui-btn-up-a ui-btn-icon-top">
    <span class="ui-btn-inner ui-btn-corner-all">
    <span class="ui-btn-text">Logga in</span>
        <span class="ui-icon ui-icon-custom"></span>
    </span>
     </a>
</li>

LoginRedirectPage.java,(包含重定向js的页面)

@Override
public void renderHead(IHeaderResponse response) {
log.info("Redirecting to " + redirectUrl);//to check via log

// if the parent is the mobile app..
response.renderOnDomReadyJavascript(
"if(parent && parent.$ && parent.$.mobile){" +
"parent.$('#logout').show();" +
"parent.$('#login').hide();" +
"parent.history.go(-2);" +                  
"console.log('redirecting with jqm "+redirectUrl+"');" +//logging
"}");

然而,(见过这个来吧!?),

行&#34; parent。$(&#39;#logout&#39;)。show();&#34;和#34; parent。$(&#39;#login&#39;)。hide();&#34;

在浏览器中(通过PC)执行它们应该执行的操作,启用注销链接并隐藏登录链接(如果用户已登录)。

但是在通过Android手机执行此操作时,链接显示/隐藏,因为它们应该是,登录链接仍然在那里。好像我没有登录,虽然日志显示我已登录。

常量&#34; redirectUrl&#34;在这种情况下,请回到StartPage.html。

顺便说一句,我也试过使用一些旧式的js,例如。 &#34; parent.document.getElementById(&#39; logout&#39;)。style.display =&#39; block&#39;;&#34;,无效。

提前致谢。

//卡勒

2 个答案:

答案 0 :(得分:1)

好的,已经有一段时间了,但这是我最终为我的工作做的事情,此时我要感谢jbrookover的快速回答。 然而,解决方案被证明是一个更“老旧”的解决方案。

在使用JQueryMobile的情况下,页面存储在缓存中,以降低加载页面的成本。 这意味着从一开始的页面也存储在缓存中,从而存储在Android手机中呈现不同链接的方式,并且该解决方案利用了旧的HTML。 通过在起始页的头部分中包含以下内容,

 <meta http-equiv="Pragma" content="no-cache" />
 <meta http-equiv="Cache-control" content="no-cache" />
 <meta http-equiv="Expires" content="0" />

这个页面从未存储在JQueryMobile的缓存和javscript代码中,

@Override
public void renderHead(IHeaderResponse response) {
log.info("Redirecting to " + redirectUrl);//to check via log

// if the parent is the mobile app..
response.renderOnDomReadyJavascript(
"if(parent && parent.$ && parent.$.mobile){" +
"parent.$('#logout').show();" +
"parent.$('#login').hide();" +
"parent.history.go(-2);" +                  
"console.log('redirecting with jqm "+redirectUrl+"');" +//logging
"}");

实际上正在生效。

希望这可能会在某些时候用于其他有JQueryMobile缓存问题的人。

的Sinc。

答案 1 :(得分:0)

Wicket可以自由地重写你的元素ID,特别是如果你正在做任何复杂的Ajax。但是,它使这些ID可用于此类事件。这将是你的java代码:

Link logoutLink = new Link("logoutlink");
logoutLink.setOutputMarkupId(true); // Explicitly create the ID attribute
add(logoutLink);

然后,当您渲染javascript时,请将该行调整为如下所示:

"parent.$('#" + logoutLink.getMarkupId() + "').show();"

显然,您必须将logoutLink变量放在renderHead方法可访问的范围内。

您可以通过查看已渲染的代码来确认这确实是问题。该ID可能已从“注销”更改为“logoutlink12”