单击浏览器中的 URL 或回发页面时是否存在全局 JavaScript 事件与每个 URL 的单击事件
Is there a global JavaScript event when a URL in browser is clicked or a page is posted back Vs click event of each URL
我需要在用户点击 URL 时捕获一些重要信息,即获取对 URL 的请求,以及当 post 返回发生在 ASP.Net 页。
问题:JavaScript中是否有一个全局事件处理程序可以在这种情况下使用?
我可以为每个可能的 URL 点击或返回一个页面 post 编写一个 click/submit 事件处理程序,但最好是我可以使用一个全局事件处理程序所有 URL 次点击和所有表单提交。我会将这个全局处理程序放在我的 ASP.Net 应用程序的母版页中。
更新 1
我尝试使用以下代码来处理来自 ASP.Net 页面的所有 POST 提交,但它没有触发。在 ASP.Net 页面中,每页只有一个表单,因此我在下面的代码片段中将事件处理程序附加到文档中的第一个表单。
document.forms[0].onsubmit = function () { alert('form submitted'); }
更新 2
在 ASP.Net aspx 页面中,如果使用上述代码片段,表单提交事件不会触发。在呈现的 ASP.Net aspx 页面的 html 中,发出以下 form
标记。可以看出 onsubmit 绑定了一些 ASP.Net 特定逻辑,但不确定是什么阻止了上述事件处理程序的触发。
<form method="post" action="./Login.aspx?ReturnUrl=%2fnewcom%2fProducts%2fBrowseProducts.aspx%3fsw%3d1099&sw=1099"
onsubmit="javascript:return WebForm_OnSubmit();"
onkeypress="javascript:return WebForm_FireDefaultButton(event,
'ctl00_ContentPlaceHolder1_Login1_btnVAMLogin')" id="aspnetForm"
onreset="if (window.setTimeout) window.setTimeout('DES_OnReset(false);', 100);">
更新 3
根据 Jdsfighter 的回答,aspx 页面中的所有 URL 都可以附加到同一个点击处理程序。
为了附加全局表单提交处理程序,以下两种方法之一对我有用。在下面的代码片段中,在表单提交事件中调用的常见 JavaScript 是 setStartTime()
。 我发现只有这两种方法可用于在 aspx Webforms 页面中创建全局表单提交事件处理程序。
使用母版页或内容页的代码隐藏添加全局 JavaScript
ScriptManager.RegisterOnSubmitStatement(this.Page, this.GetType(), "start", "setStartTime();");
在母版页或内容页中添加 onsubmit 属性以形成标记
<form id="form1" runat="server" style="min-height: 100%; margin: 0" onsubmit="setStartTime();">
您可以在标签名称上使用事件侦听器。
var elements = document.getElementsByTagName('a');
for(var i = 0, len = elements.length; i < len; i++) {
elements[i].onclick = function () {
// stuff
}
}
我需要在用户点击 URL 时捕获一些重要信息,即获取对 URL 的请求,以及当 post 返回发生在 ASP.Net 页。
问题:JavaScript中是否有一个全局事件处理程序可以在这种情况下使用?
我可以为每个可能的 URL 点击或返回一个页面 post 编写一个 click/submit 事件处理程序,但最好是我可以使用一个全局事件处理程序所有 URL 次点击和所有表单提交。我会将这个全局处理程序放在我的 ASP.Net 应用程序的母版页中。
更新 1
我尝试使用以下代码来处理来自 ASP.Net 页面的所有 POST 提交,但它没有触发。在 ASP.Net 页面中,每页只有一个表单,因此我在下面的代码片段中将事件处理程序附加到文档中的第一个表单。
document.forms[0].onsubmit = function () { alert('form submitted'); }
更新 2
在 ASP.Net aspx 页面中,如果使用上述代码片段,表单提交事件不会触发。在呈现的 ASP.Net aspx 页面的 html 中,发出以下 form
标记。可以看出 onsubmit 绑定了一些 ASP.Net 特定逻辑,但不确定是什么阻止了上述事件处理程序的触发。
<form method="post" action="./Login.aspx?ReturnUrl=%2fnewcom%2fProducts%2fBrowseProducts.aspx%3fsw%3d1099&sw=1099"
onsubmit="javascript:return WebForm_OnSubmit();"
onkeypress="javascript:return WebForm_FireDefaultButton(event,
'ctl00_ContentPlaceHolder1_Login1_btnVAMLogin')" id="aspnetForm"
onreset="if (window.setTimeout) window.setTimeout('DES_OnReset(false);', 100);">
更新 3
根据 Jdsfighter 的回答,aspx 页面中的所有 URL 都可以附加到同一个点击处理程序。
为了附加全局表单提交处理程序,以下两种方法之一对我有用。在下面的代码片段中,在表单提交事件中调用的常见 JavaScript 是
setStartTime()
。 我发现只有这两种方法可用于在 aspx Webforms 页面中创建全局表单提交事件处理程序。
使用母版页或内容页的代码隐藏添加全局 JavaScript
ScriptManager.RegisterOnSubmitStatement(this.Page, this.GetType(), "start", "setStartTime();");
在母版页或内容页中添加 onsubmit 属性以形成标记
<form id="form1" runat="server" style="min-height: 100%; margin: 0" onsubmit="setStartTime();">
您可以在标签名称上使用事件侦听器。
var elements = document.getElementsByTagName('a');
for(var i = 0, len = elements.length; i < len; i++) {
elements[i].onclick = function () {
// stuff
}
}