单击浏览器中的URL或发回页面时是否存在全局JavaScript事件Vs每个URL的单击事件

时间:2015-11-19 19:39:57

标签: javascript asp.net javascript-events webforms

每当用户点击某个网址(即获取网址请求)以及在ASP.Net网页中发布回发消息时,我都需要捕获一些重要信息。

问题:JavaScript中是否有一个可以在这种情况下使用的全局事件处理程序?

我可以为每个可能的URL点击或页面回发写一个点击/提交事件处理程序,但最好是我可以为所有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&amp;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(&#39;DES_OnReset(false);&#39;, 100);">

更新3

  1. 根据Jdsfighter的回答,aspx页面中的所有网址都可以附加到同一个点击处理程序中。

  2. 为了附加全局表单提交处理程序,以下两种方法之一适用于我。在下面的代码段中,在表单提交事件上调用的常见JavaScript是setStartTime()These are the only 2 approaches that I found worked for creating a global form submit event handler in aspx Webforms pages.

  3. 使用母版页或内容页面的代码隐藏

    添加全局JavaScript
     ScriptManager.RegisterOnSubmitStatement(this.Page, this.GetType(), "start", "setStartTime();");
    

    添加onsubmit属性以在母版页或内容页面中形成标记

    <form id="form1" runat="server" style="min-height: 100%; margin: 0" onsubmit="setStartTime();">
    

1 个答案:

答案 0 :(得分:2)

您可以在标记名称上使用事件侦听器。

var elements = document.getElementsByTagName('a');
for(var i = 0, len = elements.length; i < len; i++) {
    elements[i].onclick = function () {
        // stuff
    }
}