最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript中onmouse事件在div中失效問題的解決方法

 更新時間:2012年01月09日 23:34:22   作者:  
我們預期只有當鼠標從div中移開的時候才會觸發(fā)onmouseout事件,可事實上,當我們移到div中的元素時,例如:本例中的a標簽時,就會觸發(fā) onmousout事件
也就是說,移到對象的子對象上,也算onmouseout了。但這往往會達不到我們想要的預期效果。這是由于javascript自身的冒泡特性導致的(即在子元素上觸發(fā)了事件,并冒泡到了父元素-堆棧后進先出算法)。今天在網(wǎng)上搜了一下,找了以下的解決辦法(兼容IE和Firefox)。
在IE下解決問題很簡單,用onMouseEnter、onMouseLeave來代替onMouseOver、onMouseOut就行了,他們的作用基本相同,但前者不會發(fā)生冒泡(如果用 jQuery的event事件,只要綁定mouseleave、mouseenter即可)。但firefox下并沒有onMouseEnter、onMouseLeave這兩個事件。那么只能使用純js來解決IE及Firefox的兼容性問題了:
原理:通過判斷觸發(fā)onMouseOut事件后,鼠標到達的元素是不是包含在父元素信息欄(div)內,如果是就表示鼠標還在信息欄(div)上,則不隱藏。如果否就表示鼠標真的移出了信息欄(div),那么信息欄就要隱藏。
復制代碼 代碼如下:

// 首先來獲取觸發(fā)onMouseOut事件的元素,IE下通過event的toElement屬性來獲得,firefox下通過event的relatedTarget屬性來獲得。
IE:event.toElement ,F(xiàn)irefox:event.relatedTarget(注意:Firefox下的event須通過在函數(shù)調用時傳入,而IE下的event則可以直接通過window.event系統(tǒng)對象來獲得)
// ① 接下來就是判斷獲取的元素是否是主體div的子元素(IE下可以通過元素的obj.contains(element)方法來判斷,但Firefox下沒有這個方法,所以需要給firefox定義元素的obj.contains()方法)。
代碼如下:
if(typeof(HTMLElement)!="undefined") // 給firefox定義contains()方法,IE已經(jīng)系統(tǒng)自帶有這個方法了
{
HTMLElement.prototype.contains=function(obj) {
while(obj!=null&&typeof(obj.tagName)!="undefind") { // 通過循環(huán)對比來判斷是不是obj的父元素
     if(obj==this) { return true; }
     obj=obj.parentNode;
   }
return false;
};
}
// ② 獲取和判斷搞定后,我們就可以通過判斷IE和Firefox來針對處理了,通過navigator.userAgent來判斷瀏覽器類型:
if(navigator.userAgent.indexOf("MSIE")>0) {
return "MSIE";
}
if(navigator.userAgent.indexOf("Firefox")>0){
return "Firefox";
}
// ③ 到此為止所有要解決的問題都得到了解決,當觸發(fā)onMouseOut事件時,我們將針對不同的瀏覽器先獲取鼠標到達的元素,然后通過判斷該元素是否在信息欄(div)內,如果元素是子元素,那么不執(zhí)行onMouseOut事件,反之則執(zhí)行事件,隱藏信息欄,完成后的代碼如下:
function hideMsgBox(theEvent){ //theEvent用來傳入事件,F(xiàn)irefox的方式
  if (theEvent){
  var browser=navigator.userAgent; //取得瀏覽器屬性
  if (browser.indexOf("Firefox")>0){ //如果是Firefox
   if (document.getElementById('MsgBox').contains(theEvent.relatedTarget)) {//如果是子元素
   return; //結束函數(shù)
}
}
if (browser.indexOf("MSIE")>0){ //如果是IE
if (document.getElementById('MsgBox').contains(event.toElement)) { //如果是子元素
return; //結束函數(shù)
}
}
}
/*要執(zhí)行的操作(如:隱藏)*/
document.getElementById('MsgBox').style.display='none' ;
……
}
// ④ 在信息欄(Div)上設置onMouseOut=hideMsgBox(event)來調用。

另外,通過設置window.event.cancelBubble = true (IE) ,event.stopPropagation() event.preventDefault() (Firefox) 也可以解決問題,但是需要遍歷所有子元素,影響效率,所以還是在觸發(fā)onMouseOut事件時再進行上述判斷分別處理比較合適。

相關文章

  • js實現(xiàn)AES加密解密功能(簡易又全面)

    js實現(xiàn)AES加密解密功能(簡易又全面)

    在項目中傳輸數(shù)據(jù),可通過對請求數(shù)據(jù)或響應數(shù)據(jù)進行加密,防止信息泄露,下面這篇文章主要給大家介紹了js實現(xiàn)AES加密解密功能的相關資料,需要的朋友可以參考下
    2024-05-05
  • 小程序實現(xiàn)多列選擇器

    小程序實現(xiàn)多列選擇器

    這篇文章主要為大家詳細介紹了小程序實現(xiàn)多列選擇器的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 談談我對JavaScript原型和閉包系列理解(隨手筆記6)

    談談我對JavaScript原型和閉包系列理解(隨手筆記6)

    這篇文章主要介紹我對JavaScript原型和閉包系列理解(隨手筆記6)的相關資料,需要的朋友可以參考下
    2015-12-12
  • 開發(fā)跨瀏覽器javascript常見注意事項

    開發(fā)跨瀏覽器javascript常見注意事項

    對于javascript的開發(fā)人員來說,多瀏覽器的支持性,一直是個問題,每次都要經(jīng)過測試,多個瀏覽器,才能使用下面一些常見的一些注意事項。
    2009-01-01
  • js通過googleAIP翻譯PHP系統(tǒng)的語言配置的實現(xiàn)代碼

    js通過googleAIP翻譯PHP系統(tǒng)的語言配置的實現(xiàn)代碼

    一同事弄了個系統(tǒng)是php寫的,雖然是多語言但沒中文!他打算手動翻譯2000多個語言配置,真是佩服,知道后想了想,應該有好的法辦
    2011-10-10
  • el表達式 寫入bootstrap表格數(shù)據(jù)頁面的實例代碼

    el表達式 寫入bootstrap表格數(shù)據(jù)頁面的實例代碼

    這篇文章主要介紹了el表達式 寫入bootstrap表格數(shù)據(jù)頁面的實例代碼,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-01-01
  • 微信小程序進入廣告實現(xiàn)代碼實例

    微信小程序進入廣告實現(xiàn)代碼實例

    這篇文章主要介紹了微信小程序進入廣告實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Three.js開發(fā)實現(xiàn)3D地圖的實踐過程總結

    Three.js開發(fā)實現(xiàn)3D地圖的實踐過程總結

    這篇文章主要給大家介紹了關于利用Three.js開發(fā)實現(xiàn)3D地圖的實踐過程,文中通過示例代碼介紹的非常詳細,對大家學習或者使用three.js具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • JS中的reduce()方法使用小結

    JS中的reduce()方法使用小結

    這篇文章主要介紹了JS中的reduce()方法使用小結,文章通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • JS截取與分割字符串常用技巧總結

    JS截取與分割字符串常用技巧總結

    這篇文章主要介紹了JS截取與分割字符串常用技巧,以實例形式分析你了JavaScript針對字符串的截取與分割常用函數(shù)的定義、功能及使用技巧,并補充分析了substr和substring方法的區(qū)別,需要的朋友可以參考下
    2015-11-11

最新評論

玉林市| 伊金霍洛旗| 和硕县| 历史| 兰考县| 龙州县| 合江县| 广河县| 墨竹工卡县| 高阳县| 瑞金市| 新宁县| 双桥区| 昭觉县| 湖口县| 通榆县| 怀化市| 莫力| 福泉市| 方正县| 潜江市| 台南市| 青冈县| 天等县| 兰西县| 邯郸县| 高州市| 洛隆县| 武宣县| 铜川市| 苍南县| 新泰市| 锡林浩特市| 成都市| 永新县| 嘉峪关市| 兴山县| 那曲县| 来宾市| 德安县| 重庆市|