我需要找到在对象上注册的事件处理程序.
例如:
$("#el").click(function() {...});
$("#el").mouseover(function() {...});
Run Code Online (Sandbox Code Playgroud)
$("#el")有点击和鼠标悬停注册.
是否有一个函数来找出它,并可能迭代事件处理程序?
如果通过适当的方法在jQuery对象上不可能,那么在纯DOM对象上是否可能?
我可以使用此代码删除点击事件,
$('p').unbind('click')
Run Code Online (Sandbox Code Playgroud)
但是,有一些方法可以删除所有事件吗?
有一个unbindAll在jquery中命名的方法?
谢谢
我有一些元素与click事件绑定的函数.我想将相同的函数绑定到mouseover和mouseout事件.是否可以获得对click事件的引用,以便我可以将其分配给其他事件?我在想象这样的东西(里面each()):
$(this).bind('mouseover', $(this).click());
$(this).bind('mouseout', $(this).click());
$(this).unbind('click');
Run Code Online (Sandbox Code Playgroud)
你可能会问的问题
为什么不直接更改将其绑定到click事件的代码?
设置它的JS是Drupal模块的一部分(DHTML菜单,如果你很好奇),所以我不想更改模块代码,因为当模块将来不可避免地更新时它将被清除.我还使用了click该页面的其他部分的处理程序-我只是想将它移动到mouseover和mouseout一个菜单.
我目前在不同的页面中有几个动作按钮,每个按钮在单击时执行一些AJAX调用.换句话说,我在各地都有这样的代码: -
$("#searchButton")
.button()
.click(function() {
...
$.get(url, { data: ...}, function(data) { ... });
...
});
Run Code Online (Sandbox Code Playgroud)
在进行一些测试之后,似乎在调用回调函数之前,某些AJAX调用至少要花费几秒钟来处理.
我的计划是在进行AJAX调用时禁用该按钮,并在AJAX调用完成时将其启用.这是为了防止用户在处理请求时多次单击该按钮.我找到的一个解决方案是利用unbind()和bind()功能.修改我的代码后,它现在看起来像这样: -
var searchButtonClickHandler = function() {
...
$.get(url, { data: ...}, function(data) { ... });
...
};
$("#searchButton")
.button()
.ajaxStart(function() {
$(this).button("disable").unbind("click");
})
.ajaxStop(function() {
$(this).button("enable").bind("click", searchButtonClickHandler);
})
.click(searchButtonClickHandler);
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常.基本上,它在进行AJAX调用时删除了单击处理程序,并在完成AJAX调用时返回单击处理程序.
我的问题是...是有可能一概而论按钮禁用/启用,这样我就不必实现ajaxStart()和ajaxStop所有的UI按钮?
理想情况下,我想使用我之前的代码片段仅在按钮上注册click事件处理程序,然后使用.ui-button选择器启用/禁用所有按钮,如下所示......
$(".ui-button")
.ajaxStart(function() {
$(this).button("disable").unbind("click");
})
.ajaxStop(function() {
// not sure how to bind the handler here
$(this).button("enable").bind("click", ?? ); …Run Code Online (Sandbox Code Playgroud)