當您使用jQuery UI打開模式對話框時,您會注意到,如果使用Tab鍵,您可以將焦點放在對話框的按鈕上,但對話框外的任何輸入都會被忽略。我試圖用jQuery UI Tools Overlay來實現這種相同的行爲,但我不確定jQuery UI是如何做到的。它似乎沒有將元素的標籤索引設置爲-1,此外,這樣做會非常繁瑣,因爲它會涉及找到不屬於對話框的所有可聚焦元素。如果你需要自動化,這不會很好。有沒有一種方法可以禁用焦點除了少數幾個頁面的所有元素?jQuery UI對話框如何禁用焦點背景輸入?
9
A
回答
9
對話框小部件實際上處理keypress
事件並執行其自己的選項卡關鍵處理。此處理忽略對話框外的可放置元素。
相關的源代碼(線路中的current version at the time of this post 286至305)是:
// prevent tabbing out of modal dialogs
if (options.modal) {
uiDialog.bind('keypress.ui-dialog', function(event) {
if (event.keyCode !== $.ui.keyCode.TAB) {
return;
}
var tabbables = $(':tabbable', this),
first = tabbables.filter(':first'),
last = tabbables.filter(':last');
if (event.target === last[0] && !event.shiftKey) {
first.focus(1);
return false;
} else if (event.target === first[0] && event.shiftKey) {
last.focus(1);
return false;
}
});
}
注意TrueBlueAussie的評論是正確的,並用來綁定到錯誤的事件的對話框控件的釋放。應該使用的keypress
:
uiDialog.bind('keydown.ui-dialog', function(event) {
// ...
});
4
這裏是代碼處理此塊:
// prevent tabbing out of modal dialogs
this._on(uiDialog, {
keydown: function(event) {
if (!options.modal || event.keyCode !== $.ui.keyCode.TAB) {
return;
}
var tabbables = $(":tabbable", uiDialog),
first = tabbables.filter(":first"),
last = tabbables.filter(":last");
if (event.target === last[0] && !event.shiftKey) {
first.focus(1);
return false;
} else if (event.target === first[0] && event.shiftKey) {
last.focus(1);
return false;
}
}
});
它看起來像jQuery UI添加了一個過濾器(:tabbable
)對jQuery選擇器引擎和當對話框處於活動狀態,它只允許選項卡在模態的可放置元素之間循環。
代碼來自:https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.dialog.js
+0
從今天開始'keydown'是正確的。 'FrédéricHamidi'的答案使用'keypress'並且不會觸發'tab'鍵。 +1 –
相關問題
- 1. 焦點環jQuery UI對話框按鈕
- 2. 禁用jQuery UI對話框
- 3. 對焦禁用對話框
- 4. AngularJS/UI - 對話框中的焦點輸入
- 5. JQuery Mobile對話框背景
- 6. 如何禁用Primefaces對話框中第一個輸入的焦點?
- 7. jquery ui對話框如何檢測焦點丟失
- 8. 如何防止jQuery UI對話框修改背景佈局?
- 9. 如何更改jquery ui對話框的背景顏色
- 10. jQuery UI對話框關閉輸入
- 11. 在IE10中禁用JQuery UI對話框
- 12. 在jQuery對話框中的輸入字段中移除焦點
- 13. 如何從jQuery UI對話框中返回用戶輸入
- 14. 如何從jquery ui對話框中獲取用戶輸入
- 15. jQuery UI對話框 - 標題欄中的輸入文本框被禁用?
- 16. 如何停止輸入字段焦點的黃色背景?
- 17. dijit datetextbox背後的jQuery UI對話框
- 18. 在jQuery UI對話框中將焦點設置爲字段
- 19. jQuery UI:模態對話框焦點錯誤?
- 20. jQuery UI的 - 裏面對話框按鈕不斷獲得焦點
- 21. jQuery UI對話框:IE 8中背景上的巨大DIV
- 22. jQuery UI對話框上的不同背景
- 23. 獨特的模式背景顏色對話框jQuery UI的
- 24. 無法設置jquery ui對話框覆蓋背景顏色
- 25. jquery的UI模式對話框屏蔽背景
- 26. 對於輸入:焦點隱藏用jQuery
- 27. jQuery對話框失去焦點滾動
- 28. jquery對話框的初始焦點
- 29. JQuery對話框和背景凍結
- 30. jquery對話框 - 推背景內容
是啊,它看起來有點難以模仿,但是這就是我一直在尋找。謝謝 – JayPea
請注意,如果這是一個小問題,或者您引用的來源與j08691同一日期的答案不同,但要做到這一點,tab-key處理需要'keydown',而不是'keypress'。 'keypress'太晚了(或者根本沒有開啓標籤)。 –
@TrueBlueAussie,絕對不是miscopy(我跟蹤了原始來源[有](https://github.com/jquery/jquery-ui/blob/1.8/ui/jquery.ui.dialog.js) ),但我可能複製粘貼了一個錯誤,是的:)我會修復鏈接和錯誤。 –