为什么在从onclick调用的Javascript方法中不使用e?

为什么在从onclick调用的Javascript方法中不使用e?,javascript,jquery,javascript-objects,dom-events,Javascript,Jquery,Javascript Objects,Dom Events,据我所知,e在Javascript方法中表示“事件”,但我不明白如果我想在调用Javascript方法时使用下面提到的一些属性,该怎么办 例如,我可以在此方法中使用e.preventDefault()或e.ctrlKey: $(".menuItem").click(function (e) { e.preventDefault(); //Open url in new tab with ctrl key press if (e.ctrlKey) { w

据我所知,
e
在Javascript方法中表示“事件”,但我不明白如果我想在调用Javascript方法时使用下面提到的一些属性,该怎么办

例如,我可以在此方法中使用
e.preventDefault()
e.ctrlKey

$(".menuItem").click(function (e) {

    e.preventDefault();

    //Open url in new tab with ctrl key press
    if (e.ctrlKey) {
        window.open(url, '_blank');
        event.stopPropagation();
        return false;
    }

    //... code omitted for brevity
});   
但我不能在从表单元素调用的方法中使用它们,即
.menuItem
。是否有可能在下面的方法中使用它

function TestFunction(e, controller, action) {

        e.preventDefault();

        //Open url in new tab with ctrl key press
        if (e.ctrlKey) {
            window.open(url, '_blank');
            event.stopPropagation();
            return false;
        }

        //... code omitted for brevity
    });
};
更新:我调用TestFunction(),如下所示:

<a onclick="TestFunction('Account', '_Register')" id="test" class="nav-link ">

当我在该方法中使用e时,会遇到“uncaughtreferenceerror:e未定义”错误。有什么想法吗

据我所知,“e”在Javascript方法中表示“事件”

仅根据约定,因为人们使用该名称来声明事件处理程序接收的参数。它也可能是gonzofish

您不能在
TestFunction
中使用事件对象,除非调用它响应事件并将事件对象传递给它

更新:您说过您正在调用
TestFunction
如下:

<a onclick="TestFunction(e, 'Account', '_Register')" id="test" class="nav-link ">
…并在其中一致地使用
e
(而不是
event
),并将
onclick
属性更改为使用
event
,而不是
e

<a onclick="TestFunction(event, 'Account', '_Register')" id="test" class="nav-link ">

onxyz
属性事件处理程序中,
event
是范围内变量(在大多数浏览器上,它是围绕属性文本创建的生成函数的局部变量;在旧IE上,它是全局变量)


旁注:您可能会定期看到
事件
(而不是
e
),而不声明它。微软的IE过去(可能现在仍然)有一个全局
事件
对象(Chrome决定将为IE编写的网站作为一块骨头扔掉并复制它;Firefox没有)。不要用它。相反,请使用适当的事件处理并声明收到的参数


旁注2:Re
TestFunction
,JavaScript中压倒性的惯例是,当函数名是构造函数时,它们只以大写字母开头(例如,用于
new
)。按照惯例,所有其他函数名都应该以小写字母开头。当然,您可以选择不遵循约定,但如果您遵循约定,您可以更轻松地阅读其他人的代码,反之亦然。

evente只能在event中使用。您将在函数中访问

要在函数中使用,必须从事件传递参数

function TestFunction(controller, action,e) {.....

正如您所看到的,您的
TestFunction
中没有
e
参数,您需要添加它是的,但是在使用它时,我遇到了问题中提到的错误。我还在问题中添加了e参数。知道吗?如何将
TestFunction
与click事件绑定?您的代码中是否有
$(“.menuItem”)。单击(TestFunction)?尝试使用
@T.J.Crowder“TypeError:e is null”遇到错误。我不是很沮丧,但仅供参考,我也尝试了相同的方法,但没有成功:(谢谢,您是否从click event传递了该参数?是的,但问题是函数中的参数名称,如Rayon所述(我从event更改为e).Vote+感谢您的帮助。感谢您的回复我感谢您的详细解释。我更新了问题中的代码,现在它可以工作了。在这种情况下,我们可以说“e事件也可以用于类似这样调用的javascript方法吗?”@二进制:这里的关键是
e
只是一个参数的名称。该参数由函数的调用方式决定。在适当的事件处理程序中(与
addEventListener
连接),事件机制将参数传递给函数。如果使用
onxyz
属性,则需要使用属性中的代码有权访问的
event
变量显式传递它。
function TestFunction(controller, action,e) {.....