为什么在从 onclick 调用的 Javascript 方法中不使用 e?
据我所知,
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 未定义” 错误。有什么想法吗?
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
),函数名称才以大写字母开头。按照惯例,所有其他函数名称都应以小写字母开头。当然,您可以选择不遵循惯例,但遵循惯例可以让您更轻松地阅读其他人的代码,反之亦然。
event OR e 只能在事件中使用。并且您将在函数中访问。
要在函数中使用,您必须从事件中传递参数。
function TestFunction(controller, action,e) {.....