当前位置: 首页 > 知识库问答 >
问题:

UI中的Javascript函数:重复显示/隐藏联系人公式不工作

徐昊焜
2023-03-14

我有一个facelet可以动态地列出从数据库加载的老师的姓名,个人资料图片等。每个列出的老师都有自己的联系公式,在页面加载后会被隐藏,还有一个按钮“联系”,点击后会打开下面的联系公式并隐藏按钮“联系”。该公式有一些文本字段和一个提交按钮“Send Request”。单击“Send request”之后,我想调用一个备份bean方法,该方法将请求保存在数据库中,并且使用javascript再次隐藏联系公式并显示“Get in Touch”按钮。

下面是列出教师的页面:

<ui:composition template="/WEB-INF/templates/layout.xhtml"
            xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://xmlns.jcp.org/jsf/html"
            xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
            xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
            xmlns:p="http://primefaces.org/ui">

<ui:define name="content">

    <script type="text/javascript">
        $(document).ready(function () {
            $(".request_form").hide();
        });
    </script>

    <ui:repeat id="teachers" var="teacher" value="#{teachersController.teachers}" varStatus="it">

        profile picture, infos, etc.

        <p:button id="btn_open_request_form"
                  value="get in touch"
                  onclick="$('#teachers:#{it.index}:request_form').show(300); $(this).hide(); return false;"/>

        <h:form class="request_form" id="request_form" prependId="false">

            Text inputs for email, message...

            <p:button value="#{msg['cancel']}"
                      onclick="$('#teachers:#{it.index}:request_form').hide(300); $('#teachers:#{it.index}:btn_open_request_form').show(); return false;"/>
            <p:commandButton value="send request"
                             process="@form"
                             update="@form"
                             action="#{teachersController.sendRequest(teacher.id)}"
                             oncomplete="$('#teachers:#{it.index}:request_form').hide(300); $('#btn_open_request_form_#{it.index}').show();"
                             />

        </h:form>

        <h:messages></h:messages>
        <br/>
    </ui:repeat>

</ui:define>
</ui:composition>

在第一次尝试中,我使用C:foreach而不是ui:repeat来迭代教师。使用jQuery显示/隐藏联系人公式和按钮的工作很好,但是p:commandButton的操作方法无法调用,也没有发送请求,所以我切换到ui:repeat。

现在,请求被保存到数据库中,但是用Javascript隐藏/显示不再起作用了。公式被pageload隐藏。但是,当点击“取得联系”时,按钮本身会被隐藏,就像我想要的那样,但是没有显示任何公式。

<button id="teachers:1:btn_open_request_form"
        name="teachers:1:btn_open_request_form"
        type="button"
        class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
        onclick="$('#teachers:1:request_form').show(300); $(this).hide(); return false;;window.open('/lehrerverzeichnis/faces/requests/teachers.xhtml','_self')">
<form id="teachers:1:request_form"
      name="teachers:1:request_form"
      method="post"
      class="request_form" ...>

非常感谢你..

共有1个答案

宦博超
2023-03-14

这只是个愚蠢的错误。jQuery选择器中的分号需要转义。在创建的html源中,$('#some:id')需要为$('#some\:id')。若要保留两个反斜杠,则必须在facelet中进行转义。所以在.xhtml文件中必须写入$('#some\\\:id'),所以冒号前必须有4个反斜杠,这样才能在创建的HTML中保留2个。

这就是为什么我更喜欢Java的原因,它至少能告诉我问题出在哪里…:d

 类似资料:
  • 问题内容: 按下后如何隐藏“编辑”链接?当我按下编辑键时,是否还可以隐藏“ lorem ipsum”文本? 问题答案:

  • 问题内容: 我想使用MUI Grid,并且如果屏幕很小,我想隐藏一项Grid,所以我找到了一个名为Display的东西。我的代码看起来像这样 我不理解为什么它不起作用(文本仍然出现)。不能将显示与Grid一起使用吗?如果是,那为什么呢? 问题答案: 该风格的功能都不会自动支持组件。 利用样式功能的最简单方法是使用Box组件。该组件使所有样式功能(例如display)都可用。所述组件具有组件道具(默

  • 问题内容: 对于我正在做的网站,我想加载一个div,然后隐藏另一个,然后有两个按钮可以使用JavaScript在div之间切换视图。 这是我当前的代码 替换div2的第二个功能不起作用,但第一个功能起作用。 问题答案: 如何显示或隐藏元素: 为了显示或隐藏元素,请操纵元素的style属性。在大多数情况下,您可能只想更改元素的属性: 或者,如果您仍然希望元素占用空间(例如,如果您要隐藏表格单元格),

  • 对于我正在做的一个网站,我想加载一个div并隐藏另一个,然后有两个按钮可以使用JavaScript在div之间切换视图。 这是我当前的代码 null null 取代div2的第二个函数不起作用,但第一个是。

  • 主要内容:实例,jQuery hide() 和 show(),实例,实例,实例,jQuery toggle(),实例隐藏、显示、切换,滑动,淡入淡出,以及动画,哇哦! 因为时间是宝贵的,我们提供快捷方便的学习方法。 在小牛知识库,你可以学习需要的知识。 实例 jQuery hide() 简单的jQuery hide()方法演示。 jQuery hide() 另一个hide()实例。演示如何隐藏文本。 jQuery hide() 和 show() 通过 jQuery,您可以使用 hide() 和

  • 问题内容: 我一直在寻找一个很好的技巧,使隐藏/显示内容或仅具有CSS而没有javascript的列表。我已成功执行此操作: 并且它正在工作,但没有达到应有的效果。这是问题所在:显示内容时,您可以通过单击“页面上的任何位置”将其隐藏。如何禁用它?如何通过单击“隐藏”隐藏内容“仅”?先感谢您! 问题答案: 我不会使用复选框,而是使用您已经拥有的代码 CSS HTML 这样,仅在单击hide元素时隐藏