2012-01-05 258 views
1

比方說,我這樣做:mootools的禁用或攔截added事件

$('field').addEvents ({ 
    'focus' : function() { // do some stuff } 
    'blur' : function() { // do other stuff } 
}); 

這是我所有的文本輸入字段的默認行爲。我現在想要做的是這樣的事情

<button id='shinyButton' name='shinyButton'>Poke Me</button>

則:

$('shinyButton').addEvent('click', function() { 
    stopDefaultBlurFunctionInCurrentlyFocussedField(); 
    // do seriously cool stuff 
    if (finishedDoingSeriouslyCoolStuff) { 
    $('field').focus(); // return focus to input field 
    } 
} 

這樣:

1)我如何stopDefaultBlurFunctionInCurrentlyFocussedField();?

2)我該如何判斷我是否真的完成了DoingSeriouslyCoolStuff?

+0

點擊一個按鈕,而專注於場是棘手的,它會激發關閉一個模糊以及點擊您可以使用的模糊回調短暫的延遲,你可以清除。在點擊 - 不理想,因爲點擊可以是一個長時間的點擊憑藉鼠標持有時間超過預期 - 或者你可以與所有這些代表團去父母的形式,你可以檢查eventTargets等......這不是一個簡單的任務。你可能會遇到問題您還可以在按鈕上添加鼠標懸停事件,該按鈕在模糊檢查和優雅退出的字段上設置標誌... – 2012-01-05 11:03:53

+0

gotcha。所以爲了我的意圖和目的:NO。 :D再次感謝@Dimitar。作爲一個旁註,我看到你也是自學成才的。給我希望!大聲笑。 – WhiteRau 2012-01-05 18:42:59

+0

nah-它可以工作。檢查http://jsfiddle.net/dimitar/edsqg/1/ - 就像我說的那樣,如果您將鼠標懸停在提交上,則禁用所需字段上的模糊事件,因此點擊它將不會觸發字段驗證。任何其他模糊會。 – 2012-01-06 11:14:18

回答

0

嚴格地說,你不能做你想做的事情,因爲blur事件在點擊處理程序執行之前觸發。

Dimitar建議在鼠標懸停時禁用該事件對鼠標用戶來說工作正常,但可以防止用戶使用鍵盤觸發按鈕。

一個選項(但有點破解)將引入一個微小的延遲到blur事件處理程序中,並使用變量標誌來控制事件觸發(您可能需要調整延遲以使其不可察覺,但仍然足夠長,你的目的:

var disableBlurMethod = false; 

$('field').addEvents ({ 
    'focus' : function() { // do some stuff } 
    'blur' : function() { 
    (function() { 
     if (!disableBlurMethod) { 
     // do some stuff 
     } 
    }).delay(50); 
    } 
}); 

$('shinyButton').addEvent('click', function() { 
    disableBlurMethod = true; 
    // do seriously cool stuff 
    if (finishedDoingSeriouslyCoolStuff) { 
    disableBlurMethod = false; 
    $('field').focus(); // return focus to input field 
    } 
}