当前位置: 首页 > 面试题库 >

PrimeFaces inputText ajax event = valueChange单击命令按钮后触发

萧渝
2023-03-14
问题内容

使用JSF和PrimeFaces 6.1,我有一个inputText字段,例如:

<p:inputText value="#{backingBean.stringField}">
    <p:ajax event="valueChange" update="@form" />
</p:inputText>

在同一个表单中是一个commandButton:

<p:commandButton id="btnDoThatThing" 
                 ajax="true" 
                 immediate="true"
                 update="@form"
                 process="@this"
                 action="#{backingBean.doThatThing}"/>

当我

  1. 对inputText字段进行更改,
  2. 然后单击命令按钮以外的其他位置
  3. 单击命令按钮

一切都按预期工作。但是如果我:

  1. 对inputText字段进行更改,
  2. 立即命令按钮

该按钮未触发,因为commandButton的第一次单击触发了valueChange事件在inputText字段中发生。

如果我第二次单击它,按钮动作最终会发生。

现在,如果我按预期的那样将commandButton 更改p:ajax event="valueChange"p:ajax event="keyup"第一次单击,则可正常工作,但是不幸的是,inputField上的keyup事件非常hacky,并且您失去了该字段内的功能(复制/粘贴文本,文本选择,“快速”键入等)

关于如何在inputText字段中启动change事件,以及当用户在inputText字段中键入后立即单击按钮时,如何触发commandButton动作有任何想法?

谢谢你的时间!


问题答案:

首先,您的valueChange被触发。这将更新 包含
按钮的html" target="_blank">表单。无法100%确定这是否取决于浏览器,但是在Chromium(Linux)中,不会执行对先前呈现的按钮(在更新之前)的单击。

将更新表达式更改为选择器时,可以使它工作。我的表达式会更新需要更新的元素(
不包括 按钮)。就我而言:

<p:ajax update="@(form :input:not(button))" />

请注意,该change事件是输入的默认事件,因此已删除event="valueChange"

当然,您不需要使用选择器。您也可以只更新不包含按钮的组件(如面板):

<p:ajax update="yourPanel" />

另外,ajax="true"的默认设置p:commandButton,因此您可以将其删除。



 类似资料:
  • PayPal Checkout按钮点击本身打开PayPal安全窗口,其余工作正常。当客户点击第一个单选按钮时,我想再次打开PayPal安全窗口,即触发点击PayPal结账按钮。如果按钮本身出现在iframe中,而我无法触发该按钮跨域的单击事件,我该怎么做?有没有办法触发签出按钮的点击? 这里是超文本标记语言代码: 和Javascript代码: 编辑:作为一个工作的例子,我会建议这个网站,但这是有点

  • 问题内容: 似乎是一个简单的问题,但解决其他问题的方法似乎对我没有用。 试图通过单击按钮来触发AJAX请求,但似乎并未触发。 HTML示例 javascript 问题答案: 您拥有的代码在拨弄中工作得很好。初始页面加载后,按钮是否通过AJAX动态呈现? 用 代替

  • 我找到了其他相关的问题,但没有一个答案实际上解决了我的问题。这个按钮在IE上很好用,但在Chrome上不行。我尝试移除span元素,将按钮放在任何其他标记之外,但仍然触发了两次。这个temple扩展了一个'base.html'文件,代码位于'main'元素中。 HTML: jQuery:

  • 编辑:底部的解决方案 这是一个跳棋游戏。单击一个按钮后,它等待单击第二个按钮与之交换。然而,有时你可能不想移动那个按钮,但一旦你点击了它,就没有回头路了,因为我无法禁用它。 在这里的其他帖子中,我看到人们使用 这只是使它在第一次单击后不可见。 这什么都干不了。 这也没什么用。编辑:所有这些方法都用true和false进行了尝试。 私有无效交换(){ 但你也需要 这样它就重新启用了它,或者其他什么,

  • 问题内容: 这是我想做的事情:单击页面上的一个按钮,这又使(2)事情发生: 显示一个ModalPopup,以防止用户按下任何按钮或更改值 在方法后面调用我的代码,完成后隐藏ModalPopup 这是ASP标记: 现在,这是我在C#代码后面的代码: 为什么不起作用?ModalPopup可以完美显示,但是btnSaveData_Click事件从不触发。 更新: 第一个建议对我不起作用。我还尝试了您的第

  • 我已经检查了这个链接,但它提到了长点击。但是我在点击自定义对话框的按钮后面临这个问题。我已经把我的代码贴在这里了。有人能帮我避免这个错误吗?