首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能绑定.click(),让它在onclick之前触发吗?

问你能绑定.click(),让它在onclick之前触发吗?
EN

Stack Overflow用户
提问于 2011-07-14 22:04:10
回答 4查看 11.8K关注 0票数 14

我正在为一个用JSF构建的应用程序编写jQuery。无论JSF做什么,JSF组件都使用自己的JS,并且它们使用大量的onclick属性来处理所有这些事情。

是否有有效/适当的方法将您自己的单击事件绑定到元素,并确保您的事件在默认的onclick事件之前触发?默认情况下,在任何内联onclick函数调用之后,都会触发jQuery单击函数。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-14 22:09:23

在jQuery中,事件严格按照它们注册的顺序触发。

您可以通过迭代整个DOM,删除那些onclick属性,然后注册您自己的处理程序,然后调用最初定义的函数,从而绕过任何内联DOM0 onclick风格的处理程序。

类似于:

代码语言:javascript
复制
$('[onclick]').each(function() {
    var handler = $(this).prop('onclick');
    $(this).removeProp('onclick');
    $(this).click(handler);
});

请参阅http://jsfiddle.net/alnitak/2SCTK/

因此,首先用jQuery注册您自己的处理程序,然后调用上面的代码来删除原始的内联onclick处理程序,并重新注册它们,就像jQuery添加了它们一样。

编辑代码简化为只使用原始函数- jQuery将确保在正确的上下文中调用该函数。以前将上下文显式设置为window的代码不正确。

票数 17
EN

Stack Overflow用户

发布于 2011-07-14 22:09:26

您可以从DOM元素中删除onClick事件,然后使用jQuery重新绑定它。

代码语言:javascript
复制
<div id="click" onclick="alert('DOM')">CLICK ME</div>

$('#click').click(function(){
    alert('jQuery');
});

var clickFunc = $('#click').prop('onclick');
$('#click').removeProp('onclick');
$('#click').click(clickFunc);

事件是按照绑定的顺序调用的,因此首先调用函数的唯一方法是解除绑定,然后重新绑定原始函数。

演示:http://jsfiddle.net/wYd5t/2/

票数 7
EN

Stack Overflow用户

发布于 2011-07-14 22:11:52

对于同一元素上的同一侦听器,无法强制执行事件触发顺序。每个浏览器都可以按照它选择的任何顺序自由地触发事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6694434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档