因為 IE8 只吃 evt.cancelBubble = true 才不會把click事件往上層傳
所以以下是終極不會有問題的寫法
if (evt.stopPropagation) { evt.stopPropagation() } if (evt.preventDefault) { evt.preventDefault() } try { evt.cancelBubble = true } catch (e) { } try { evt.returnValue = false } catch (e) { }
evt就是傳進來的event
(補充一下) 這個適合用 window.addEventListener 方式綁事件才需使用,如果用jQuery綁事件直接return false;就有一樣的效果
範例:
// 經由bike提示,發現這範例不好 jQuery 可以直接 return false; $("#gc-exp-month-select a").click(function (evt) { $("#gc-exp-month").val($(this).text()); $("#span-gc-exp-month").text($(this).text()); $(this).parent().hide(); if (evt.stopPropagation) { evt.stopPropagation() } if (evt.preventDefault) { evt.preventDefault() } try { evt.cancelBubble = true } catch (e) { } try { evt.returnValue = false } catch (e) { } // 在 jQuery 裡上面四行 可以用一行 return false; 就可 });