DA.*_*DA. 13 javascript jquery jsf click onclick
我正在为一个用JSF构建的应用程序编写jQuery.JSF组件使用了很多自己的JS来执行JSF所做的任何事情,并且他们使用大量的onclick属性来处理它们.
是否有有效/正确的方法将您自己的click事件绑定到元素并确保您的事件在默认的onclick事件之前触发?看来默认情况下,在任何内联onclick函数调用之后会触发jQuery单击函数.
Aln*_*tak 16
在jQuery中,事件严格按照它们的注册顺序触发.
您可以onclick通过迭代整个DOM,删除这些onclick属性,然后注册自己的处理程序然后调用最初定义的函数来规避任何内联DOM0 样式处理程序.
就像是:
$('[onclick]').each(function() {
var handler = $(this).prop('onclick');
$(this).removeProp('onclick');
$(this).click(handler);
});
Run Code Online (Sandbox Code Playgroud)
见http://jsfiddle.net/alnitak/2SCTK/
因此,首先使用jQuery注册您自己的处理程序,然后调用上面的代码来删除原始内联onclick处理程序并重新注册它们,就像jQuery添加它们一样.
EDIT代码简化为仅使用原始函数--jQuery将确保使用正确的上下文调用该函数.显式设置上下文的先前代码window不正确.
您可以onClick从DOM元素中删除该事件,然后使用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);
Run Code Online (Sandbox Code Playgroud)
事件按它们绑定的顺序调用,因此首先调用函数的唯一方法是取消绑定,然后重新绑定原始函数.
演示:http://jsfiddle.net/wYd5t/2/