我正在为一个用JSF构建的应用程序编写jQuery。 JSF组件使用了很多自己的JS来执行JSF所做的任何操作,并且他们使用了大量的onclick属性来处理它们。
是否有有效/正确的方法将您自己的点击事件绑定到元素并确保您的事件在默认的onclick事件之前触发?看来默认情况下,在任何内联onclick函数调用之后会触发jQuery单击函数。
答案 0 :(得分:16)
在jQuery中,事件严格按照注册顺序触发。
您可以通过遍历整个DOM,删除那些onclick
属性,然后注册自己的处理程序来绕过任何内联DOM0 onclick
样式处理程序,然后调用它们定义的功能。
类似的东西:
$('[onclick]').each(function() {
var handler = $(this).prop('onclick');
$(this).removeProp('onclick');
$(this).click(handler);
});
请参阅http://jsfiddle.net/alnitak/2SCTK/
因此,首先使用jQuery注册您自己的处理程序,然后调用上面的代码删除原始的内联onclick
处理程序并重新注册它们,就像jQuery添加它们一样。
EDIT 代码简化为只使用原始函数 - jQuery将确保使用正确的上下文调用该函数。显式设置上下文为window
的先前代码不正确。
答案 1 :(得分:7)
您可以从DOM元素中删除onClick
事件,然后使用jQuery重新绑定它。
<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);
按照绑定的顺序调用事件,因此首先调用函数的唯一方法是取消绑定,然后重新绑定原始函数。
答案 2 :(得分:1)
无法在同一元素上为同一个侦听器强制执行事件触发顺序。 每个浏览器都可以按照它选择的任何顺序自由发射事件。
答案 3 :(得分:1)
您可以在元素上使用onmousedown
。