阻止事件冒泡和默認到事件對象在不同瀏覽器中的傳遞
阿新 • • 發佈:2018-04-01
內部 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,所以顯示
阻止事件冒泡和默認到事件對象在不同瀏覽器中的傳遞