Javascript JQuery将焦点事件附加到下一个焦点输入

Javascript JQuery将焦点事件附加到下一个焦点输入,javascript,jquery,events,Javascript,Jquery,Events,这里的想法是,一个函数只需要在任何input/textarea/select的下一个焦点上运行,但一次性函数可以重置为再次运行 一个简单的例子是选中了一个复选框,然后在下一个焦点事件中,任何其他字段都应该运行一个检查,查看该字段是否具有一个特定的属性值,并且有多个可能的字段为true。这应该允许用户取消选中该复选框,然后再次选中该复选框以再次触发相同的事件 值得注意的是,测试复选框是否被选中不是一个选项,因为这个附加的焦点事件应该能够为任何类型的字段设置模糊、单击或任何其他jQuery事件 我目

这里的想法是,一个函数只需要在任何input/textarea/select的下一个焦点上运行,但一次性函数可以重置为再次运行

一个简单的例子是选中了一个复选框,然后在下一个焦点事件中,任何其他字段都应该运行一个检查,查看该字段是否具有一个特定的属性值,并且有多个可能的字段为true。这应该允许用户取消选中该复选框,然后再次选中该复选框以再次触发相同的事件

值得注意的是,测试复选框是否被选中不是一个选项,因为这个附加的焦点事件应该能够为任何类型的字段设置模糊、单击或任何其他jQuery事件

我目前的想法是设置一个全局JavaScript变量,该变量在每个焦点事件上都会被检查:

var-checkFocus=false

然后,为所有表单字段设置焦点事件,包括输入、文本区域等:

$('input').focus(function(){
  if(checkFocus){
    // Put the target code here.
    checkFocus = false;
  }
});
这将允许代码的任何部分将checkFocus设置为true,然后告诉焦点事件运行目标代码

是否有方法捕获每个元素的所有焦点事件?如果是这样的话,是否有一种方法可以运行一次性事件,如果需要,还可以将其设置为再次运行

编辑

有一种方法可以使焦点事件成为一次性事件,但它不包括任何非输入元素的表单字段,如textarea或select。这可以通过offevent函数完成。我不确定这对这个问题是否有帮助,因为对其他选择器这样做实际上会使代码出现不止一次

$("input").on("focus", function(event) {
  alert( "This will be displayed only once." );
  $(this).off(event);
});

经过大量的谷歌搜索,我能够回答我自己的问题

这是您设置事件的方式,可以在任何地方设置:

var id = 'something';
var name = 'something-else';

// Bind the event to three tags commonly used on forms
$("input, select, textarea").on("focus", {id: id, name: name}, focusEvent);
这是focusEvent函数,用于处理字段焦点上的逻辑:

var focusEvent = function(event){
  // Commonly used values for an event
  var id = event.data.id;
  var name = event.data.name;
  var focused_id = $(this).attr('id');
  var focused_name = $(this).attr('name');

  // Do something on the next focus event

  // Unbind the one-time event
  $("input, select, textarea").off("focus", focusEvent);
}
这是我能想到的最简单的设置,它不需要全局变量,也不需要设置需要单独处理的多个事件

问题中最初没有包括的一部分是.on函数使用event.data将参数传递给定义的事件函数的能力。在编写焦点事件逻辑时,这使我的生活变得更加轻松


此外,此解决方案的优点在于,根据事件函数的逻辑,事件可以解除绑定。这使您能够将一次性事件转换为可能的一次性事件。

如果选中了收音机,您是否只想在元素的焦点上执行某些操作。。?或者其他什么?是的,但是radio的值应该与焦点事件中的目标代码无关。可以使用jQuery的值来附加处理程序,并在需要时在处理程序中再次附加。