我正在使用以下代码,它在Chrome中运行得非常好。
function dayBind(xyzValue) {
if(event.type == 'click')
alert('Mouse Clicked')
}
请注意,没有"event"变量传递给函数,但在chrome的情况下,它仍然对我可用。但当我使用Firefox时,我会得到未定义的"事件"。我尝试使用以下解决方案:
var e=arguments[0] || event;
还有:
var e=window.event || event;
但它们都不适用于我。在Firefox中有类似的"事件"吗?
因为IE和Chrome把事件放在全局对象window
中,所以你可以得到它。在firefox中,你需要让第一个参数是事件。
function dayBind(event, xyzValue) {
var e=event || window.event;
if(event.type == 'click')
alert('Mouse Clicked')
}
如果你用"onclick"属性或其他东西设置处理程序(由于你标记了问题"jQuery",你真的应该考虑不这样做),你必须明确地传递它:
<button type=button onclick='whatever(event)'>Click Me</button>
如果需要跨浏览器工作,只需使用arguments
对象:
function dayBind()
{
var e=arguments[0];
if(!!e && e.type === 'click')
{
alert('Mouse Clicked')
}
}
参考
- 事件和处理程序概述
- DOM事件处理程序
- eventTarget.addEventListener
我正在处理一个插件的回调函数。我自己不能这么说。
你的建议有一个简单的问题:当你写:onclick="whatever(event)"
时,你正在用onclick
属性的值写javascript,对吧?
为什么你不能在其他函数中进行相同的函数调用,比如
function foo(){ whatever(event); // this is also javascript }
//但这在FireFox 10.0.2 中对我不起作用
"onclick"属性中的代码应该被视为浏览器为您创建的函数的一部分。该功能会自动提供"事件"参数。按照我在答案中所做的那样编写属性会导致该参数传递到您的另一个函数。
实际上,您应该了解jQueryneneneba API,并使用它来绑定事件处理程序,而不是使用"onclick"和其他类似的属性。