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

带有html文本的Primefaces datatable行不调用选择事件

佟涵畅
2023-03-14

我试图显示从服务器收到的HTML文本在一个可更新的行。

表单看起来像这样:

<h:form id="carPageForm" prependId="false">

                <p:dataTable var="car" value="#{tableBean.lazyModel}" paginator="true"
                    rows="10" rowKey="#{car.id}" widgetVar="carsTable"
                    paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                    selectionMode="single"
                    selection="#{tableBean.selectedCar}" id="carTable">

                    <f:facet name="header">
                        <p:outputPanel>
                            <p:inputText id="globalFilter" onkeyup="carsTable.filter()" style="float:right"/>
                            <h:outputText value="Search all fields:" style="float: right; margin-top: 2px;" />
                        </p:outputPanel>
                    </f:facet>

                    <p:ajax event="rowSelect" update=":carPageForm:display"
                        oncomplete="carDialog.show()" />

                    <p:column id="idColumn" filterBy="#{car.id}" style="display:none"
                        filterMatchMode="contains">
                        <h:outputText value="#{car.id}" />
                    </p:column>

                    <p:column id="adColumn" filterBy="#{car.ad}" filterStyle="display:none">
                        <h:outputText value="#{car.ad}" escape="true"/>
                    </p:column>
                </p:dataTable>

                <p:dialog header="Car Detail" widgetVar="carDialog"
                    resizable="false" showEffect="scale" hideEffect="explode">

                    <h:panelGrid id="display" columns="2" cellpadding="4">

                        <h:outputText value="Title:" />
                        <h:outputText value="#{tableBean.title}" style="font-weight:bold" />

                        <h:outputText value="Description:" />
                        <h:outputText value="#{tableBean.description}"
                            style="font-weight:bold" />

                        <h:outputText value="Price:" />
                        <h:outputText value="#{tableBean.price}" style="font-weight:bold" />
                    </h:panelGrid>
                </p:dialog>

            </h:form>

共有2个答案

张成济
2023-03-14

这种情况对我来说也是如此神奇,但不幸的是,建议的解决方案对我来说并不奏效。最后,我找到了一个非常简单但有效的解决方案。

instead of using <b> tag I have used <span> tag like this:

<span style="font-weight:bold">hello</span>

看,即使我点击了列中的“hello”这个词,行选择也会再次起作用。

郝君博
2023-03-14

这是因为当您选择不转义outpuText的值时,它实际上会在相应的div标记中呈现html元素。当您单击文本本身时,您实际上单击了粗体和下划线超文本标记语言元素,并且jQuery单击事件没有注册到表行。

这个点击事件绑定到类ui-dt-c的元素,因此如果你用一个包含这个类的div将文本包装在html元素中,那么点击文本将触发点击事件。

<b><u><div class="ui-dt-c"> e78fe894 Ferrari Blue 1994 </div></u></b>
 类似资料:
  • 问题内容: 我想将文本作为标签添加到我的网页,并使它不可选择。 换句话说,当鼠标光标悬停在文本上方时,我希望它根本不会变成文本选择光标。 我要实现的目标的一个很好的例子是该网站上的按钮(问题,标签,用户等)。 问题答案: 用普通的HTML无法做到这一点,因此JSF在这里也无法为您做很多事情。 如果您仅针对体面的浏览器,则只需使用CSS3: 如果您还想涵盖较旧的浏览器,请考虑以下JavaScript

  • 问题内容: 我有以下代码在HTML网页中显示文本框。 显示页面时,文本包含“ 请输入用户ID” 消息。但是,我发现用户需要单击3次才能选择所有文本(在这种情况下, 请输入用户ID )。 只需单击一下就可以选择整个文本吗? 编辑: 抱歉,我忘了说:我必须使用输入 问题答案: 您可以使用以下javascript代码段: 但显然,它不适用于移动Safari。在这种情况下,您可以使用:

  • 问题内容: 是否有机会检测用户为元素类型HTML所做的每个文件选择? 之前曾多次问过这个问题,但是如果用户再次选择相同的文件,通常不会建议该事件。 问题答案: 的值设置到每个事件。即使选择了相同的路径,这也会重置的值并触发事件。 注意:如果文件以’C:\ fakepath'为前缀是正常的。这是一项安全功能,可防止JavaScript知道文件的绝对路径。浏览器仍然内部知道它。

  • 尝试做一个chrome扩展来自动化我的工作中的一些日常琐事。所以这个站点有一个标准的下拉输入,如下所示。 当我手动单击其中一个选项时,它会触发一个ajax调用,并用新数据加载页面的部分。但如果我以编程方式尝试选择该选项,它不会触发ajax调用。下面是我用来选择一个选项的代码,它选择了该选项,但没有像预期的那样触发ajax调用。 编辑-按照注释中的建议使用。

  • 问题内容: 我不确定这是否可能,但是我有一种情况,我想在HTML select标记的选项内将文本的 一部分 (不是全部)加粗。 我尝试使用b标签以及强标签,但没有运气(在Chrome上)。CSS可能会起作用,但是由于它在元素级别起作用,所以我不确定该怎么做。 有什么办法吗? 问题答案: 没有; 这是不可能的。 相反,您可以使用Javascript制作伪造的下拉列表。

  • 问题内容: 我正在构建带有一些文本元素(例如选项卡名称)的HTML UI,这些文本元素在被选中时看起来很糟糕。不幸的是,对于用户来说,双击选项卡名称非常容易,该名称在许多浏览器中都是默认选择的。 我也许可以用JavaScript技巧解决这个问题(我也想看看那些答案),但是我真的希望CSS / HTML中的某些功能可以直接在所有浏览器中使用。 问题答案: 在大多数浏览器中,可以使用CSS来实现: 对