你能绑定.click()使它在onclick之前触发吗?
can you bind .click() so that it fires prior to onclick?
我正在为一个用JSF构建的应用程序编写jQuery。JSF组件使用了很多自己的JS来完成JSF所做的事情,并且它们使用了很多onclick属性来处理这一切。
是否有有效/适当的方法来绑定你自己的点击事件到一个元素,并确保你的事件在默认的onclick事件之前触发?似乎默认情况下,jQuery的click函数在任何内联onclick函数调用之后被触发。
在jQuery中,事件是严格按照注册的顺序触发的。
你可以绕过任何内联的DOM0 onclick
风格的处理程序,迭代整个DOM,删除那些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
是不正确的。
您可以从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);
事件是按照它们被绑定的顺序调用的,所以首先调用函数的唯一方法是取消绑定,然后重新绑定原始函数。
演示:http://jsfiddle.net/wYd5t/2/
无法强制同一元素上的同一侦听器的事件触发顺序。每个浏览器都可以自由地以它选择的任何顺序触发事件。
您可以在元素上使用onmousedown
相关文章:
- 在React中,为什么我必须绑定onClick函数而不是调用它
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 使用JavaScript将onclick事件与参数绑定
- 将多个元素绑定到同一onclick
- 对触发其onclick功能的按钮进行键绑定
- html+jquery(绑定onclick事件以执行onclick之前的操作)
- 对克隆的image元素绑定onclick事件
- 如果父项具有onclick绑定,则复选框单击将被忽略
- 动态绑定onclick事件为for循环中的所有按钮提供相同的值
- 将列表元素 onclick 事件绑定到单选输入
- 如何将新函数绑定到元素的 onclick 事件,并使其在所有其他绑定函数之前运行
- 解绑,然后将 OnClick 函数(带有动态参数)绑定到 jQuery 或 JavaScript 中继器中的锚标记
- 绑定一个 onclick 函数,对象作为在循环中创建的锚标记上的参数
- 在 onClick 事件上调用函数时使用绑定
- 挖空点击绑定:onClick vs. onClick()
- 在点击此链接后,获取绑定到锚链接的 onclick 函数内的 URL/锚点
- 将按钮onclick事件绑定到Backbone View
- jQuery:将 onClick 绑定到指向其他页面的所有锚点,目标=_self
- 正确的方式onClick绑定在按钮
- 防止 JavaScript OnClick 绑定 confirm() 覆盖 VB.NET Click 处理程序