我有一個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