Posted on 

IE @ Windows 8/8.1 的 Scrollbar 在 jQuery is() has() 失效問題

相信有些前端工程師(包括我)喜歡自己刻一些 select 或 input、check box、radio、button 等 js、css,最近公司的新系統上線,被客戶反應說 select 的下拉 scrollbar 在 Windows 8/8.1 的 IE,滑鼠點選 scrollbar 要往下拉,選單卻會縮回去的問題,這是我在 code 裡面用 is(e.target) && has(e.target).length === 0 所發生的事情,不斷的 google 才發現到一篇 stackoverflow 的解答卻是微軟的 IE Bug (微軟你好樣的…!),害我非常苦惱該怎麼解決它,後來找到同樣在 stackoverflow 裡神人的解答,非常的簡單,使用我們熟悉的 jquery.hover 即可,有夠簡單的,立馬解決了這個問題,相關文章如下:

文章1:IE 11 on Windows 8/8.1 JQuery is() and has() don’t include scrollbar of scrollable div

文章2:Use jQuery to hide a DIV when the user clicks outside of it

文章2的部份,作者選擇的正解是 is() has() 的方法,在往下捲有人回覆用 hover 的方法,參考一下囉。

程式碼範例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var mouse_is_inside = false;

$(document).ready(function()
{
$('.form_content').hover(function(){
mouse_is_inside=true;
}, function(){
mouse_is_inside=false;
});

$("body").mouseup(function(){
if(! mouse_is_inside) $('.form_wrapper').hide();
});
});