1. 程式人生 > >阻止事件冒泡和默認到事件對象在不同瀏覽器中的傳遞

阻止事件冒泡和默認到事件對象在不同瀏覽器中的傳遞

內部 eth default pre 興趣 class UNC div alert

今天群裏有一個同學發了一個問題,問題起因是他定義了一個drag函數,然後函數內部使用了e進行組織默認實踐,結果在360瀏覽器正常運行但是火狐卻報錯,e不存在,第一時間有點懵,組織冒泡和組織默認一般都用,那裏需要那裏用,一般不會出現這種問題。因為新手才有這種操作,但是引發我興趣,經過一番測試,我發現在360裏面時間默認進行了傳遞,所以在360可以正常運行,但是在火狐裏面沒有進行傳遞。然後我傳遞參數為事件對象進去,執行成功,然後引發了我對幾個瀏覽器不同引擎的猜測和測驗。首先上代碼,

<!DOCTYPE html>
<html>
<head>
<meta charset
="utf-8"> <title></title> </head> <body>

<form method="get" action="#">
<input type="submit" name="" id="button">
</form>

<script type="text/javascript" src="Jquery.js"></script>
<script type="text/javascript">
$("#button").click(function(e){
    drag()
})
function drag(ev) { var newEV=ev||window.event; newEV.preventDefault() alert("我前面都成功執行了") } </script> </body> </html>

這是問題代碼,在Safari和Google下測試,成功執行了,但是在火狐和IE(ie炸了我不確定是我ie設置問題還是ie本身不能執行。知道的同學可以回復下)下失敗了。修改代碼,傳入事件對象。

$("#button").click(function(e){
    drag(e)
})
function drag(ev) { var newEV=ev||window.event; newEV.preventDefault() alert("我前面都成功執行了") }

所有瀏覽器都執行成功,(別問所有包不包括ie,ie下載都能失敗),因為我將點擊事件e作為drag的參數ev傳入內部函數再執行。然後進行兼容檢測,window.event處理兼容用的很多我就不多說,我這裏討論這個參數有沒有用,改變nweEV=window.event,繼續執行,然後在Safari和Google下成功組織的get請求,FF失敗報錯了,ie還在睡覺不能用,所以Safari和Google下事件對象是直接傳到了drag裏面,所以都成功了,但是FF裏面我傳入的e,最終執行的newEV卻是window.event,所以顯示newEV is undefined,這樣就簡單理解了。以上僅代表個人意見,有失誤的地方希望可以提出共勉。

備註:ie睡醒後測試結果我補上,ie虐我千百遍,我待ie如不見就好了。

阻止事件冒泡和默認到事件對象在不同瀏覽器中的傳遞