我有,我們正試圖把加快速度進行無障礙的要求模態窗口腳本。要求說,當你離開窗戶時,它應該關閉。它還表示,在解散窗戶後,原始觸發元素必須重新獲得焦點。jQuery的:當焦點離開元素的兒童檢測,然後將焦點回到觸發元件
做了一些挖掘後,我發現這個:jQuery figuring out if parent has lost 'focus'。看起來,告訴你什麼時候離開窗口最簡單的方法是跟蹤focusin事件,並且當焦點觸發不是開放模式的子元素時,關閉窗口。然而,這種方法是有問題的,因爲你會看到(更不用說有點太重了我的喜好)。下面是處理這個代碼:
$('body').focusin(function(e) {
if (!$(e.target).parent().is('.current-window')) {
closeModal();
}
});
和功能,即關閉窗口:
function closeModal() {
$('.modal-mask, .current-window').fadeOut('fast', function(){
$(this).removeClass('current-window');
$('.modal-mask').removeAttr('style');
$('.modal-trigger').focus();
});
}
現在很明顯,當我運行這段代碼,closeModal()觸發來回focusIn事件之間直到最大調用堆棧,因此在將焦點集中到觸發元素之前拋出「超出最大調用堆棧」錯誤消息。
請參閱本搗鼓全碼:http://jsfiddle.net/pbredenberg/wxX4T/
我試圖想到一個更好的方式來處理這個要求,或者至少是避免無限循環。任何人都可以將我指向正確的方向嗎?
所以'$( '模式觸發')專注()'創建的模式? –
不,如果您檢查我發佈的小提琴,您會看到窗口的創建位置。 '$('。modal-trigger')。focus()'在窗口關閉後將焦點返回到觸發元素。 – paulwhitman