为什么在从 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) {.....
据我所知 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) {.....