通过两个事件之一调用单个事件监听器?

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 执行了。所以我认为它不是一个很好的解决方案。

以上是关于通过两个事件之一调用单个事件监听器?的主要内容,如果未能解决你的问题,请参考以下文章

一个事件监听器循环元素VS单个元素上的事件监听器?

laravel进阶系列--通过事件和事件监听实现服务解耦

Listener

转Android开发20——单个监听器监听多个按钮点击事件

JS事件

如何为 recyclerView 上的两个不同事件设置监听器?