您可以绑定 .click() 以便它在 onclick 之前触发吗?
我正在为一个在 JSF 中构建的应用程序编写 jQuery。 JSF 组件使用大量自己的 JS 来完成 JSF 所做的任何事情,并且它们使用大量 onclick 属性来处理这一切。
是否有有效/正确的方法将您自己的单击事件绑定到元素并确保您的事件在默认的 onclick 事件之前触发?默认情况下,在任何内联 onclick 函数调用后都会触发 jQuery click 函数。
I'm writing jQuery for an app that's being build in JSF. The JSF components are using a lot of their own JS for doing whatever JSF does and they use a lot of onclick attributes to handle it all.
Is there valid/proper way to bind your own click event to an element and ensure that your event fires prior to the default onclick event? It appears that by default a jQuery click function is fired after any inline onclick function calls.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在 jQuery 中,事件严格按照它们注册的顺序触发。
您可以通过遍历整个 DOM、删除这些
onclick
属性,然后注册您自己的处理程序来规避任何内联 DOM0onclick
样式处理程序,然后调用最初定义的函数。类似于:
请参阅 http://jsfiddle.net/alnitak/2SCTK/
因此,注册您自己的处理程序首先使用 jQuery,然后调用上面的代码来删除原始内联
onclick
处理程序并重新注册它们,就像 jQuery 添加它们一样。编辑代码简化为仅使用原始函数 - jQuery 将确保使用正确的上下文调用该函数。之前将上下文显式设置为
window
的代码不正确。In jQuery events are triggered strictly in the order in which they were registered.
You can circumvent any inline DOM0
onclick
style handlers by iterating over the whole DOM, removing thoseonclick
properties, and then registering your own handler which then invokes the originally defined function.Something like:
See http://jsfiddle.net/alnitak/2SCTK/
So, register your own handlers first with jQuery, then invoke the code above to remove the original inline
onclick
handlers and re-register them as if jQuery had added them.EDIT code simplified to just use the original function - jQuery will ensure that the function is invoked with the right context. Previous code which explicitly set the context to
window
was incorrect.您可以从 DOM 元素中删除
onClick
事件,然后使用 jQuery 重新绑定它。事件按照绑定的顺序调用,因此首先调用函数的唯一方法是取消绑定,然后重新绑定原始函数。
演示:http://jsfiddle.net/wYd5t/2/
You can remove the
onClick
event from the DOM element, and then rebind it using jQuery.Events are called in the order they are bound, so the only way to call your function first, is to unbind, and then rebind the original function.
Demo: http://jsfiddle.net/wYd5t/2/
无法为同一元素上的同一侦听器强制执行事件触发顺序。
每个浏览器都可以按照它选择的任何顺序自由触发事件。
There is no way to mandate event firing order for the same listener on the same element.
Every browser is free to fire the events in any order it chooses.
您可以在元素上使用
onmousedown
。You could use
onmousedown
on the element.