【问题标题】:There are two event listeners if one is invoked then other should not be invoked有两个事件监听器,如果一个被调用,那么另一个不应该被调用
【发布时间】:2023-03-17 12:47:01
【问题描述】:

无线电输入更改事件有两个事件侦听器,如果发生更改事件,则调用这两个事件侦听器。如果调用了另一个事件侦听器,我想禁用/删除它。

<label><input type="radio" name="sex" value="Male">Male</label>
<label><input type="radio" name="sex" value="Female">Female</label>

$("input:[type='radio']").change(function(){
//first listener
})

$("input:[type='radio']").change(function(){
//second listener
})

我需要的是,如果调用了一个侦听器,则不应调用其他侦听器。

【问题讨论】:

  • 为什么需要 2 个事件处理程序?应该调用哪一个?在什么条件下
  • 应该删除哪一个?更好的是,不要添加那个事件处理程序。
  • 一个常见于其他页面,我无法删除它,另一个特定于一个页面。
  • 这就是为什么你应该使用类来选择具有通用功能的元素,而不是标签名称。
  • 在这种情况下,在附加新的事件处理程序之前调用off(),但我建议总体上使用类仍然是一个更好的解决方案。

标签: jquery event-handling onchange jquery-events


【解决方案1】:
<label><input type="radio" name="sex" value="Male">Male</label>
<label><input type="radio" name="sex" value="Female">Female</label>

flag=false;
$("input[type='radio']").change(function(){
//undesired handler
setTimeout(function(){
if(!flag)
//first handler's code
},300)
})

$("input[type='radio']").change(function(){
//desired handler
flag=true;
//
})

【讨论】:

  • 那是一段糟糕的代码。难怪网页会因为这种无意义的编程而成为资源占用者。
  • @kuroineko 在这种特殊情况下,无法删除第一个处理程序,因为它在其他页面中是必需的。我不得不为一页自定义处理程序。所以我在第一个处理程序中使用延迟来确认如果第二个处理程序运行,那么第一个处理程序不应该运行。它解决了我的问题。
  • 它将您的问题转储到将运行该代码的计算机上。
猜你喜欢
  • 2018-01-08
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多