3
我正在使用任何輸入類型可以有多個字段的表單系統。含義我有文本輸入/區域,收音機,複選框,選擇,並選擇多個。HTML-multiselect偷長格式的dom滾動
我的問題是,如果鼠標進入多選(如果單選也會這樣做)滾動表單時,select會控制鼠標事件,以便停止滾動。您必須將鼠標移出輸入才能重新獲得可滾動的滾動訪問權限。
我沒有問題,重新滾動到輸入一旦它有焦點滾動的選項,但我不希望它自動承擔它。
我正在使用任何輸入類型可以有多個字段的表單系統。含義我有文本輸入/區域,收音機,複選框,選擇,並選擇多個。HTML-multiselect偷長格式的dom滾動
我的問題是,如果鼠標進入多選(如果單選也會這樣做)滾動表單時,select會控制鼠標事件,以便停止滾動。您必須將鼠標移出輸入才能重新獲得可滾動的滾動訪問權限。
我沒有問題,重新滾動到輸入一旦它有焦點滾動的選項,但我不希望它自動承擔它。
下面是我們如何解決這個問題。我們將一個函數附加到監視滾動事件的目標上。目標得到一個快速的蒙板元素,當滾動時顯示蒙板,從而防止事件滾動滾動目標。
由於外部元素正在滾動,因此目標元素不會長時間保持滾動事件。附加說500毫秒的超時將允許目標知道你想滾動目標。
function scrollUninterruptable(elem) {
var scrollTimer = null,
scrollMask = $('<div>', { 'style': 'position: absolute; right: 0; left: 0; top: 0; bottom: 0;', 'class': 'scrollMask' }).hide();
elem = $(elem);
elem.append(scrollMask);
elem.parent().off('scroll.uninterruptably').on('scroll.uninterruptably', function() {
elem.css('position', 'relative');
scrollMask.show();
if (scrollTimer) {
clearTimeout(scrollTimer);
}
scrollTimer = setTimeout(function() {
elem.css('position', '');
scrollMask.hide();
}, 500);
});
}
再次,這只是監視滾動事件附加500ms超時,然後隱藏屏幕,將允許滾動事件觸發目標。
如果多重選擇不滾動或失去焦點,用戶如何從可用選項中進行選擇 – 2013-06-01 23:28:03
不幸的是,這是多重選擇工作的本地部分(取決於您獲得真正的Windows列表的客戶端)。 如果大量用戶的體驗確實存在問題,最好的辦法是更改表單上是否存在多重選擇或者是否已啓用(請記住,它在DOM中響應的方式會發生變化和屏幕閱讀器)。 – 2013-08-28 17:46:53
我已經解決了這個問題,但忘了重新發布。這可以通過給元素附加一個快速函數來解決,並且在它內部處理附加超時的滾動事件。 – Jeff 2013-08-28 21:55:47