jquery ON 多个事件,但需要触发一个而不是所有事件

jquery ON multiple event, but need trigger one not all of them

提问人:user19014207 提问时间:12/2/2022 最后编辑:user19014207 更新时间:12/2/2022 访问量:59

问:

在jQuery中,我使用这个例子对输入做了一些事情:

var i=0;
$("#inputTest").on("focus click touchstart",function(e){
    ++i;$(this).val(i);
    console.log(e.type);
});

结果始终是触发器,我得到了两次控制台(或任何其他操作)基于焦点,首先单击第二个,我需要其中一个,我想防止触发其他操作。所以你能帮我吗?

在此示例中,我只想触发焦点或单击或...,只是一次而不是多次

请不要说使用jQuery ONE,因为一个只触发了一次,其他时间就关闭了,我希望每次用户点击或专注于输入时,做一些事情,但现在每次焦点/点击时,jQuery都会触发两次

我使用 if(e.type===“click”){}else if(e.type=“focus”){} 但仍然同时触发了两者,注意:我的输入有这个问题


编辑:

感谢您的评论,看起来不适合我想要的东西,例如@freedomn-m谢谢,但在这种情况下仍然多次调用事件处理程序。debouncesetTimeout()

事件是示例,我有多个这样的代码,其中一些有多个自定义事件,我搜索并提出这个问题以找到一次触发其中一个的好方法,如果我想进行脏编码,我可以将全局变量和设置值放在第一个触发并防止其他事件,并通过 setTimeout 释放它,就像 @freedomn-m 的例子一样,但这不是一个好方法。focus click touchstart

对于某些特殊元素,我有 10 个事件,包括 、 、 、 和自定义事件,如 、 和 ...因此,以正常方式,每次我单击该输入时,我都会收到事件和其他事件,但我需要一种很好的方法来获取拳头触发事件并删除其他事件clickfocustouchstarttouchmove_click.Namerun.Namefocusclick

例如,如果我有 & 和用户使用的 Tab 键,我想要获取焦点事件而不是 keyup,但现在我得到了这两个事件focuskeyup

jQuery 事件 触发 器单击 焦点

评论

1赞 Carsten Løvbo Andersen 12/2/2022
@HarunYilmaz 我有点确定 OP 知道这是预期的行为。我认为 OP 正在寻找一种解决方案来使用所有事件,但它们不能同时触发。
0赞 freedomn-m 12/2/2022
不确定,但您可以检查元素是否已经有焦点,然后跳过单击。但是,如果您按 Tab 键切换到该元素,然后(几秒钟后)单击,这将不起作用 - 您将不会获得该单击。取决于您的用例 - 听起来您想要事件,但不是同时 - 即输入的选项卡提供焦点。单击元素会发出单击(或焦点),单击一小段时间后,获得单击touchstartclick
0赞 freedomn-m 12/2/2022
尝试使用事件处理程序,这将仅在去抖动超时后运行事件处理程序,因此同时发生的 focus+click 只会运行一次。或者,立即触发,然后在限制超时期间忽略其他事件。debouncethrottle
0赞 freedomn-m 12/2/2022
下面是一个使用基本节流的示例:jsfiddle.net/hb8f3pnr(不可重用,因为使用全局,但显示了概念 - 应该有很多节流/去抖动插件)
0赞 freedomn-m 12/2/2022
重新编辑:不,上面的小提琴只是它如何工作的一个例子 - 如果你仍然得到两个事件,增加超时。你不会像这样实现它,你会使用适当的去抖动或限制实现。油门将完全按照您的描述执行操作。

答: 暂无答案