顯示廣告
隱藏 ✕
※ 本文為 dinos.bbs. 轉寄自 ptt.cc 更新時間: 2013-01-20 09:09:02
看板 Ajax
作者 emn178 (小殘)
標題 Re: [問題] 為何FF無法藉由new Function()傳遞事件?
時間 Sat Jan 19 14:23:03 2013


※ 引述《StarTouching (撫星)》之銘言:
: Fx乃利用事件所呼叫的函式 額外加一個事件參數 藉以傳遞參數
: 不過 透過動態方式給定的事件 卻發生錯誤??
:   //用迴圈一一指定node的事件行為
:
:   node.onclick = new Function("if(keyVerify(event)==0)toPage("+i+")");
:   // keyVerify()判斷是否為左鍵 然後執行toPage(i)
: 不過我發現keyVerify裡面抓不到event
:   event = event || window.event;
: 但是如果透過html就可以抓到event:
:   <a onClick="if(keyVerify(event)==0)toPage(0);">foooool!</a>
: 滿奇怪的 IE 和 Chrome都可以,
: 為什麼就Fx要用下面這種奇怪的方法?
:   node.setAttribute("onClick", "if(keyVerify(event)==0)toPage("+i+");");
: 有onclick可以用 setAttribute拿來設定事件還滿怪的吧?

針對"event"這個參數在HTML事件屬性中可以直接使用的原因做個說明

其實原理很簡單,瀏覽器將事件屬性自動使用了

function(event) { }

包裝了起來

例如

<input onclick="alert('test');" ...

瀏覽器實際上是當成這樣處理

<input onclick=function(event) { alert('test'); } ...

所以直接使用event這個變數是存在的,而大多數的瀏覽器也是這樣處理,以符合規範

包含FF、Chrome、IE9之後的版本等..

不過早期IE版本(IE8之前)是這樣處理

<input onclick=function() { alert('test'); } ...

而之所以event可以使用,是使用了全域變數的window.event,也就是上一篇版友所說明


你可以很簡單的用下面的方式來測試不同瀏覽器,就可以知道他們的實作方式

<input onclick="alert(arguments.callee)" type="button" value="test" />

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.105.211.107
StarTouching:感謝!1F 01/19 15:30

--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 141 
※ 文章分類: JQuery,Client-side Js
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇