通过两个事件之一调用单个事件监听器?
Posted
技术标签:
【中文标题】通过两个事件之一调用单个事件监听器?【英文标题】:Call single eventlistener by one of two events? 【发布时间】:2012-12-16 18:48:00 【问题描述】:我正在尝试一种搜索功能,它应该通过单击事件或模糊事件调用 bean 上的方法,这会首先被调用。我需要这两个事件,因为每当用户输入内容时,它都应该显示结果,并且如果用户已经复制并粘贴到搜索框中,那么它也应该可以工作。因为在第二种情况下没有关键事件,这就是我需要模糊事件的原因。我尝试在它们之间放置分隔符,例如:
<f:ajax event="keyup blur" listener="#mybean.search" render="something">
也喜欢
<f:ajax event="keyup,blur" listener="#mybean.search" render="something">
没用
所以现在我将我的代码用作
<p:inputText value="#mybean.search" >
<f:ajax listener="#mybean.searchByIdListener" event="keyup" render="datatable"/>
<f:ajax listener="#mybean.searchByIdListener" event="blur" render="datatable"/>
</p:inputText>
但是这段代码调用了两次事件监听器。如果这两个事件中的任何一个先发生的事件只调用一次事件侦听器,那就太好了。
【问题讨论】:
【参考方案1】:不确定primefaces,但在richfaces 中,您可以利用ajax 支持并调用多个事件。
否则你可以使用focus
事件吗?
【讨论】:
我在 primefaces 中有一个标签为 p:ajax ,类似于 j:ajax 。我也用过那个标签。但同样的结果。焦点事件对我不起作用,因为当用户在搜索文本框中输入内容时,我想调用 eventlistener。【参考方案2】:为什么不使用这样的东西:
<p:inputText onchange="" />
来自用户指南:
Client side callback to execute when input element loses
focus and its value has been modified since gaining focus.
【讨论】:
感谢您的回复。实际上,对于搜索方法,我需要在用户在事件键上输入任何文本时显示结果。如果用户通过鼠标复制文件并将其粘贴到文本框中,那么当用户移除焦点时不会触发 keyup 事件,那么我想调用 blur 事件。由于我对调用相同方法的单个输入法有两个事件的要求,因此我不能使用 onchange attr。 :( 如果您仍然想同时使用这两个事件,请添加变量,该变量将显示第一个事件是否已执行。 我认为这不是一个好主意,因为假设 keyup 事件已执行,那么我还必须检查删除和退格按钮。假设用户输入了一些东西,然后他删除了它,然后他用鼠标复制并粘贴它。在这种情况下,现在它不会被执行,因为它已经被 keyup 执行了。所以我认为它不是一个很好的解决方案。以上是关于通过两个事件之一调用单个事件监听器?的主要内容,如果未能解决你的问题,请参考以下文章