我有一个2文本输入和2个跨度控件的窗体。通常,当文本框A被改变时,事件被触发以改变范围A,并且当文本框B被改变时,事件被触发以改变范围B.有没有办法在不使用全局变量的情况下突破jQuery中的事件递归?
然而,在一个特例中,我希望改变文本框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;
}
}
}
});
谢谢 - 我认为它应该是这样简单! – NightOwl888 2010-10-16 11:32:41