【问题标题】:Appending an OnClick Event to an Existing JavaScript Button将 OnClick 事件附加到现有 JavaScript 按钮
【发布时间】:2014-07-28 19:42:43
【问题描述】:

我希望将一些 JavaScript 附加到服务器端按钮的onclick。所以像

 //b is a button
 b.Attributes.Add("onclick", "my.js.here();");

但不会消除该按钮上任何可能存在的onclick 事件。

编辑:上面表示一个代码隐藏文件(在 C# 中),它尝试向可能已经有 onclick 事件的客户端按钮添加额外的事件侦听器。

【问题讨论】:

  • 只有一个onclick 事件,并且只有一位代码可以在该事件上执行。也许您可以加入父对象并获得冒泡事件,但这不适用于每个对象/调用。
  • 可能是您试图在代码隐藏中注册一个 javascript 点击事件?
  • 是的,代码隐藏。对困惑感到抱歉。我修改了问题以澄清。
  • 嗯,在代码隐藏中设置点击事件并不难。但是您仍然无法选择保留现有的点击次数。每次点击只有一个任务。
  • 我相信我写的这个答案会适合你。 stackoverflow.com/a/22970430/2589202

标签: c# javascript asp.net webforms


【解决方案1】:

我通常会尽量避免使用属性订阅 JavaScript 事件。相反,我会选择addEventListener 或在此之上的一些抽象(如jQuery 的.click 处理程序)。例如,继续使用 jQuery,您可以在 ASPX 页面中使用此 JavaScript:

$('#yourButtonId').click(function() {
      my.js.here();
 });

这有几个优点,主要是您可以添加处理程序而无需踩踏已经存在的处理程序。

可以尝试做一些事情,比如获取属性的现有值,然后在其前面加上 my.js.here();,但这似乎不是一个理想的解决方案。

【讨论】:

  • 你的意思是从服务器端调用这个 JavaScript 吗?
【解决方案2】:

为什么不直接使用按钮元素 ID,然后为 onclick 做一个事件处理程序?

var myBtn = document.getElementById("buttonEl");
myBtn.onclick = function () { 

     alert("Button has been clicked");

}

【讨论】:

  • 这段代码如何停止覆盖现有的点击事件?
  • 为什么不只使用 on 事件处理程序并将您的 onclick 事件放入单个事件处理程序中?
【解决方案3】:

使用下面的方法

$("#AuthorityLevel").find("a").attr('onclick','my.js.here();');

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多