javascript - 如何阻止内联 onclick 事件并稍后在自己的点击监听器中调用它?

标签 javascript jquery

如何阻止按钮的内联 onclick 事件并稍后在我自己的点击监听器中调用在该 onclick 中定义的函数?

我尝试注入(inject)一些应该在按钮的 onclick 代码被调用之前执行的代码。

function doSomething(el) {
  console.log("doSomething was called...");
}

jQuery("#test").click(function(e) {
  e.preventDefault();
  console.log("click listener called...");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="test" onclick="doSomething(this)">Submit</button>

最佳答案

您可以通过其 onclick 属性从元素中获取对原始内联处理程序的引用,然后您可以将其重置为 null。然后您可以在需要时从您自己的 jQuery 事件处理程序中调用原始内联函数,如下所示:

var test = document.getElementById('test');
var originalInlineClickHandler = test.onclick;
test.onclick = null;

function doSomething(el) {
  console.log("doSomething was called...");
}

$(function() {
  jQuery("#test").click(function(e) {
    e.preventDefault();
    console.log("click listener called...");
    originalInlineClickHandler();
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="test" onclick="doSomething(this)">Submit</button>

应该注意的是,这是相当 hacky 的。如果可能,我强烈建议从 HTML 中删除内联事件处理程序。

关于javascript - 如何阻止内联 onclick 事件并稍后在自己的点击监听器中调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391751/

相关文章:

javascript - 在 Angular 6 中使用 Observable 的问题

javascript - 如何创建包含图像和链接的对话框?

jquery 加载功能不起作用

JQuery 选项值有时未定义

javascript - AJAX 通过 jQuery 更新页面

javascript - 当网站 URL 输入搜索框(而不是提要 url)时,像 feedly 这样的服务如何从网站获取 rss 提要

javascript - 如何清除Azure Map的绘制形状

javascript - HighCharts-ng 的 Angular JS 中的 setInterval 不起作用

jquery - Fastclick 干扰 jQuery mobile 非原生选择

javascript - NodeJS 聊天应用程序已创建。如何跑