2013-02-08 28 views
3

我正在使用任何輸入類型可以有多個字段的表單系統。含義我有文本輸入/區域,收音機,複選框,選擇,並選擇多個。HTML-multiselect偷長格式的dom滾動

我的問題是,如果鼠標進入多選(如果單選也會這樣做)滾動表單時,select會控制鼠標事件,以便停止滾動。您必須將鼠標移出輸入才能重新獲得可滾動的滾動訪問權限。

我沒有問題,重新滾動到輸入一旦它有焦點滾動的選項,但我不希望它自動承擔它。

+0

如果多重選擇不滾動或失去焦點,用戶如何從可用選項中進行選擇 – 2013-06-01 23:28:03

+0

不幸的是,這是多重選擇工作的本地部分(取決於您獲得真正的Windows列表的客戶端)。 如果大量用戶的體驗確實存在問題,最好的辦法是更改表單上是否存在多重選擇或者是否已啓用(請記住,它在DOM中響應的方式會發生變化和屏幕閱讀器)。 – 2013-08-28 17:46:53

+0

我已經解決了這個問題,但忘了重新發布。這可以通過給元素附加一個快速函數來解決,並且在它內部處理附加超時的滾動事件。 – Jeff 2013-08-28 21:55:47

回答

0

下面是我們如何解決這個問題。我們將一個函數附加到監視滾動事件的目標上。目標得到一個快速的蒙板元素,當滾動時顯示蒙板,從而防止事件滾動滾動目標。

由於外部元素正在滾動,因此目標元素不會長時間保持滾動事件。附加說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超時,然後隱藏屏幕,將允許滾動事件觸發目標。