Javascript 用于防止事件处理程序循环的公认设计模式

Javascript 用于防止事件处理程序循环的公认设计模式,javascript,javascript-events,jquery,Javascript,Javascript Events,Jquery,在使用jQuery时,我似乎一直遇到这个问题。当两个表单字段A和B具有修改另一个表单字段(A修改B,B修改A)的更改事件处理程序时,防止它们创建循环的可接受的设计模式是什么?如果要从每个处理程序显式触发伙伴元素的“更改”处理程序,只要在源元素上设置一个标志,并在看到该标志时中止处理程序 function handler(ev) { if ($(this).data("handling-now")) return; $(this).data("handling-now", true);

在使用jQuery时,我似乎一直遇到这个问题。当两个表单字段A和B具有修改另一个表单字段(A修改B,B修改A)的更改事件处理程序时,防止它们创建循环的可接受的设计模式是什么?

如果要从每个处理程序显式触发伙伴元素的“更改”处理程序,只要在源元素上设置一个标志,并在看到该标志时中止处理程序

function handler(ev) {
  if ($(this).data("handling-now")) return;

  $(this).data("handling-now", true);

  // do stuff

  $(this).data("handling-now", null);
}

隐马尔可夫模型。。。那就行了。你会推荐使用.data()吗?@rinogo-ha-ha是的,很抱歉我在。。。如果需要,也可以使用类名;这只是一种风格偏好。我会避免弄乱DOM。jQuery的
.data()
方法只将数据存储在JS变量中,是吗?应该快得多。@Brad是的,这是一个非常好的观点。如果事件处理程序设置得当,也可以使用闭包变量进行设置。这实际上取决于实现,但我会设置一个变量,或者设置隐藏的输入,以便change()事件知道它是通过编程方式更改的,而不是对userMy首选项的更改(这通常是不合理的)是为了避免这种情况。对于表单验证,我倾向于使用一个函数来设置所有内容,任何需要更改处理程序的内容都使用相同的处理程序。