【发布时间】:2015-07-13 12:34:53
【问题描述】:
我想从包含 onsubmit 的内联定义的表单中删除事件处理程序。
<form id="loginForm" onsubmit="return performTask(this);">
我已经尝试过了:
$("#loginForm").off("submit")
$("#loginForm").unbind("submit")
$("#loginForm").die("submit")
$("#loginForm").removeAttr("onsubmit")
$("#loginForm").removeProp("onsubmit")
$("#loginForm").attr("onsubmit", "")
$("#loginForm").prop("onsubmit, "")
$("#loginForm")[0].onsubmit = null
$("#loginForm")[0].onsubmit = undefined
$("#loginForm")[0].onSubmit = null
$("#loginForm")[0].onSubmit = undefined
没有任何效果!
我使用 jquery 方法 on() 添加了我自己的事件监听器,但它从未被调用。看来旧的事件监听器是在我之前执行的......它对按钮上的 onClick 事件做同样的事情。
我必须明确说明我在 Chrome 扩展中,更准确地说是在页面中注入的内容脚本中。
所以问题是,有没有办法清除事件处理程序?或者更好的是有什么方法可以添加一个事件侦听器,该侦听器将在内联处理程序之前调用?
编辑:在编写了很多丑陋的代码之后,我找到了一种方法来做我想做的事……我复制了一份表单,删除了内联事件处理程序,用我的旧表单替换了 dom 中的旧表单,然后创建我的事件处理程序。这很丑,但它有效......如果有人能解释为什么我不能这样做......
【问题讨论】:
-
事件处理程序是否可能位于父元素上?
<body>也许?onSubmit事件会冒泡。 -
不,我已经把表格的那行放在我的问题中了
标签: javascript jquery google-chrome events google-chrome-extension