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

Why e is not used in Javascript methods called from onclick?

据我所知 e 在 Javascript 方法中表示 "event",但我不明白如果我想在 [=34] 中使用下面提到的一些属性怎么办=] 调用它们时的方法。

例如,我可以在此方法中使用 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 时遇到 "Uncaught ReferenceError: e is not defined" 错误。有什么想法吗?

As far as I know "e" represent "event" in Javascript methods

仅按照约定,因为人们使用该名称来声明事件处理程序接收的参数。它可以是 gonzofish 同样容易。

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

更新:您说过您是这样呼叫 TestFunction 的:

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

如果是,请将 TestFunction 更改为:

function TestFunction(e, controller, action)`

...并在其中始终使用 e(而不是 event),并将 onclick 属性更改为使用 event,而不是 e :

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

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


旁注:您可能会定期看到 event(而不是 e)但未声明。 Microsoft 的 IE 曾经(可能现在仍然有)一个全局 event 对象(并且 Chrome 决定抛出为 IE 编写的网站并复制它;Firefox 没有)。不要使用它。相反,使用适当的事件处理并声明您收到的参数。

旁注 2:关于 TestFunction,JavaScript 中的压倒性约定是当函数名称是构造函数时(例如,用于 new).按照惯例,所有其他函数名称都应以小写字母开头。当然,你可以选择不遵循约定,但是如果你遵循约定,那么你更容易阅读别人的代码,反之亦然。

事件 OR e 只能在事件中使用。你将在函数中访问。

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

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