开发者问题收集

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

2016-08-16
186

据我所知, 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 时,出现 “Uncaught ReferenceError:e 未定义” 错误。有什么想法吗?

2个回答

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 ),函数名称才以大写字母开头。按照惯例,所有其他函数名称都应以小写字母开头。当然,您可以选择不遵循惯例,但遵循惯例可以让您更轻松地阅读其他人的代码,反之亦然。

T.J. Crowder
2016-08-16

event OR e 只能在事件中使用。并且您将在函数中访问。

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

function TestFunction(controller, action,e) {.....
Sandip - Frontend Developer
2016-08-16