※ 本文為 dinos.bbs. 轉寄自 ptt.cc 更新時間: 2013-01-20 09:09:02
看板 Ajax
作者 標題 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
推 :感謝!1F 01/19 15:30
--
※ 同主題文章:
● 01-19 14:23 ■ Re: [問題] 為何FF無法藉由new Function()傳遞事件?
01-19 17:02 ■ Re: [問題] 為何FF無法藉由new Function()傳遞事件?
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 141
回列表(←)
分享