jQuery的:如何获取事件处理函数中的事件对象,而不传递它作为参数?
我的链接上有一个onclick
属性:
<a href="#" onclick="myFunc(1,2,3)">click</a>
这指向JavaScript中的这个事件处理程序:
function myFunc(p1,p2,p3) { //need to refer to the current event object: alert(evt.type); }
由于事件对象“evt”没有传递给参数,是否仍然有可能获得这个对象?
我试过window.event
和$(window.event)
,但都是undefined
。
任何想法?
由于事件对象“evt”没有从parameter passing,是否仍然有可能获得这个对象?
不,不可靠。 IE浏览器和其他一些浏览器使它可以作为window.event
(不是$(window.event)
),但许多浏览器不。
你最好把事件对象传递给函数:
<a href="#" onclick="myFunc(event, 1,2,3)">click</a>
即使在非IE浏览器上也能运行,因为它们在具有event
variables的上下文中执行代码(因为event
parsing为window.event
所以在IE上运行)。 我试过IE6 +,Firefox,Chrome,Safari和Opera。 例如: http : //jsbin.com/iwifu4
但是,迄今为止, 最好的办法就是正确地连接事件:
HTML:
<a href="#">click</a>
使用jQuery的JavaScript(因为你使用的是jQuery):
$("selector_for_the_anchor").click(function(event) { // Call `myFunc` myFunc(1, 2, 3); // Use `event` here at the event handler level, for instance event.stopPropagation(); });
…或者如果你真的想把event
传递给myFunc
:
$("selector_for_the_anchor").click(function(event) { myFunc(event, 1, 2, 3); });
select器可以是标识锚点的任何东西。 你有一个非常丰富的select(几乎所有的CSS3,加上一些)。 你可以添加一个id
或class
的锚点,但是,你有其他的select。 如果您可以使用它在文档中的位置,而不是添加任何人造的东西,那么很好。
在IE中,您可以通过window.event
在其他浏览器中获取事件对象,而不'use strict'
指令,可以通过arguments.callee.caller.arguments[0]
。
function myFunc(p1, p2, p3) { var evt = window.event || arguments.callee.caller.arguments[0]; }
写下你的事件处理程序声明:
<a href="#" onclick="myFunc(event,1,2,3)">click</a>
然后你的“myFunc()”函数就可以访问这个事件。
“onclick”属性的string值以与浏览器(内部)几乎完全相同的方式转换为一个函数,调用Function构造函数:
theAnchor.onclick = new Function("event", theOnclickString);
(IE除外)。 但是,因为“事件”是IE中的一个全局属性(这是一个窗口属性),所以您可以在任何浏览器中将它传递给函数。
如果你在标记上调用你的事件处理程序,就像你现在正在做的那样,你不能(x-browser)。 但是,如果你将点击事件绑定到jquery,可能有以下的方法:
标记:
<a href="#" id="link1" >click</a>
使用Javascript:
$(document).ready(function(){ $("#link1").click(clickWithEvent); //Bind the click event to the link }); function clickWithEvent(evt){ myFunc('p1', 'p2', 'p3'); function myFunc(p1,p2,p3){ //Defined as local function, but has access to evt alert(evt.type); } }
自从事件ob