Javascript jQuery:如何在事件处理程序函数中获取事件对象而不将其作为参数传递?

Javascript jQuery:如何在事件处理程序函数中获取事件对象而不将其作为参数传递?,javascript,jquery,events,object,Javascript,Jquery,Events,Object,我的链接上有一个onclick属性: <a href="#" onclick="myFunc(1,2,3)">click</a> 由于事件对象“evt”未传递给参数,因此仍然可以获取此对象吗 我尝试了window.event和$(window.event),但都是未定义的 有什么想法吗?在IE中,您可以通过窗口获取事件对象。event 在没有'use strict'指令的其他浏览器中,可以通过参数.callee.caller.arguments[0]获取 functio

我的链接上有一个
onclick
属性:

<a href="#" onclick="myFunc(1,2,3)">click</a>
由于事件对象“evt”未传递给参数,因此仍然可以获取此对象吗

我尝试了
window.event
$(window.event)
,但都是
未定义的


有什么想法吗?

在IE中,您可以通过
窗口获取事件对象。event

在没有
'use strict'
指令的其他浏览器中,可以通过
参数.callee.caller.arguments[0]
获取

function myFunc(p1, p2, p3) {
    var evt = window.event || arguments.callee.caller.arguments[0];
}
由于事件对象“evt”不是从参数传递的,因此仍然可以获取此对象吗

不,不可靠。IE和其他一些浏览器将其作为
window.event
(不是
$(window.event)
)提供,但这是非标准的,并非所有浏览器都支持(众所周知,Firefox不支持)

最好将事件对象传递到函数中:

<a href="#" onclick="myFunc(event, 1,2,3)">click</a>
使用jQuery的JavaScript(因为您使用的是jQuery):

…或者如果确实要将
事件
传递到
myFunc

$("selector_for_the_anchor").click(function(event) {
    myFunc(event, 1, 2, 3);
});

选择器可以是标识锚的任何内容。您可以从中选择(几乎所有的CSS3,再加上一些)。您可以将
id
class
添加到锚点,但同样,您还有其他选择。如果您可以使用文档中的where,而不是添加一些人为的东西,那就太好了。

像这样编写事件处理程序声明:

<a href="#" onclick="myFunc(event,1,2,3)">click</a>

(工业工程除外)。但是,由于“事件”在IE中是全局的(它是一个窗口属性),因此您可以在任何浏览器中以这种方式将其传递给函数。

如果您像现在这样调用标记上的事件处理程序,则无法(x-browser)。 但是,如果使用jquery绑定click事件,则可以通过以下方式:

标记:

  <a href="#" id="link1" >click</a>

由于事件ob

arguments.callee.caller.arguments仍希望事件作为参数/参数传递。这将不起作用。该函数是在没有事件参数的情况下从事件处理程序显式调用的,因此无法作为参数访问。我在Chrome上对其进行了测试,结果正常,事件对象是HTML内联事件的隐式参数,
参数。callee.caller
是HTML生成的匿名事件处理程序函数,它的第一个参数是隐式
参数的事件对象。callee.caller
不受普遍支持,在某些支持它的实现中速度非常慢,这是一个非常糟糕的主意,在严格模式下是不允许的。对,不鼓励被调用者和调用者,但是,当事件处理代码与HTML内联时,这是访问事件对象的唯一方法,最好的方法是始终使用javascript以无冲突的方式注册事件:)在FF中测试,您是对的,它很难失败。在大量的反对票到来之前删除了这篇文章。谢谢提醒:)“如果你像现在这样在标记上调用事件处理程序,你就不能(x-browser)。”事实上,你可以(见我的答案;这适用于所有主要浏览器和我尝试过的所有次要浏览器——IE6+、Firefox、Chrome、Safari、Opera……)。但最好不要这样做。但在您的解决方案中,您将
事件
作为参数发送,LazNiko的要求是不要这样做。必须有另一种方法,但它毫无价值,因为询问者已经离开了:有一种方法(使用标记)确实是从标记调用
clickWithEvent
函数,但是,正如我们所知,从标记调用不是最好的方法(最终也是相同的解决方案)。感谢您的解释,javascript的这一部分总是让我感到困惑。这个不可见的、神秘的“事件”参数不知从何处传入的想法从未向我解释清楚。
$("selector_for_the_anchor").click(function(event) {
    myFunc(event, 1, 2, 3);
});
<a href="#" onclick="myFunc(event,1,2,3)">click</a>
theAnchor.onclick = new Function("event", theOnclickString);
  <a href="#" id="link1" >click</a>
  $(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);        
     }
  }