Events 有没有一种方法可以不用全局变量就打破jQuery中的事件递归?

Events 有没有一种方法可以不用全局变量就打破jQuery中的事件递归?,events,recursion,jquery,Events,Recursion,Jquery,我有一个表单,有两个文本输入和两个跨度控件。通常,当文本框A更改时,会触发一个事件以更改范围A,而当文本框B更改时,会触发一个事件以更改范围B 但是,在一个特殊的情况下,我希望更改文本框a或文本框B以更新范围a和范围B。在本例中,我尝试将事件连接到相应的控件,但没有成功,因为在事件构建代码中设置了很多状态(更不用说每个事件都调用“this”,这会使逻辑使用错误的控件,如果它是从与预期不同的控件触发的) 为了简化操作,最好在创建事件处理程序时将字符串(表示另一个文本输入id)传递给事件处理程序,然

我有一个表单,有两个文本输入和两个跨度控件。通常,当文本框A更改时,会触发一个事件以更改范围A,而当文本框B更改时,会触发一个事件以更改范围B

但是,在一个特殊的情况下,我希望更改文本框a或文本框B以更新范围a和范围B。在本例中,我尝试将事件连接到相应的控件,但没有成功,因为在事件构建代码中设置了很多状态(更不用说每个事件都调用“this”,这会使逻辑使用错误的控件,如果它是从与预期不同的控件触发的)

为了简化操作,最好在创建事件处理程序时将字符串(表示另一个文本输入id)传递给事件处理程序,然后调用change()在第二个控件上手动设置事件。但是,这会将事情放入递归的无限循环中。我想了一种绕过递归的方法,但它需要一个全局变量

有没有比这更好的方法,最好是不需要全局变量的方法

ml_inEvent = false;



   $ctlToVal.bind('keyup change', {feedbackCtl: ml_feedback, controlsToMonitor: ary, validationGroup: this.validationGroup, controlToFire: ctlToFire}, function(event) {
        // Other processing happens here...

        if (event.data.controlToFire != '') {
            var $controlToFire = $('#' + event.data.controlToFire);
            if ($controlToFire.length) {
                // Use a global variable to ensure this event is not fired again
                // as a result of calling the other one
                if (!ml_inEvent) {
                    ml_inEvent = true;
                    $controlToFire.change();
                    ml_inEvent = false;
                }
            }
        }
    });

您可以使用上的extraParameters参数进行中断,例如:

$ctlToVal.bind('keyup change', {feedbackCtl: ml_feedback, controlsToMonitor: ary, validationGroup: this.validationGroup, controlToFire: ctlToFire}, function(event, fire) {
  // Other processing happens here...
  if(fire !== false)  $('#' + event.data.controlToFire).trigger('change', false);
});

。这样做的目的是,事件处理程序回调不仅接收参数,而且还接收您传入的任何其他参数,在本例中,我们只是使用一个简单的
false
和一个
!===
检查这一点,以便
未定义的
(参数根本没有传递)仍然会更改两个控件。例如
$(“\35;控件”).change()
将更改两个控件,但仍然不会循环….

谢谢-我认为应该像这样简单!