2011-12-28 78 views
0

是否有一种简洁的方式将事件处理程序绑定到某个元素,而与事件类型无关?为所有事件类型附加处理程序

对于例如,我需要的是这样的:

$('#elem').bind(function(e){ 

    //do stuff for any event originating from this element 
    e.stopPropagation(); 
}); 
+2

这个问题有一个类似的答案:http://stackoverflow.com/questions/5848598/how-all-events-of- dom-element-can-be-bind – 2011-12-28 12:01:29

+0

谢谢,不知何故,当我发布这个时,它在'类似问题'部分没有出现。 :)无论如何,我的问题说'整洁'我仍然想知道是否有其他方法来做到这一点。 – 2011-12-28 12:13:20

回答

3

您可以更改bind方法的默认行为。 如果我们给出一个将会起作用的参数,将其添加到所有事件中 检查了这一点。

$.fn.init.prototype.bind = (function(old) { 

    return function() { 
     if(arguments.length == 1 && typeof arguments[0] === "function") { 
      // if we'll put to bind method one argument which is function 

      // list of whole of events - you set themselves as needed 
      return this.bind("click keydown keyup keypress mouseover mouseenter mouseout mouseleave mousedown mouseup mousemove change blur focus scroll resize load unload beforeunload", arguments[0]); 

     } else { 
      // trigger original bind method 
      return old.apply(this, arguments) 
     } ; 
    } 

})($.fn.init.prototype.bind); 

现在:

$("body").bind(function() { console.log(this) }); 

噗:)

+0

酷:)要测试这个.. – 2011-12-28 12:30:53

+0

你看起来在插件开发人员的摇滚明星:) – 2011-12-28 12:40:35

0
var eventsList = "blur, focus, load, resize, 
       scroll, unload, beforeunload, click, dblclick, 
       mousedown, mouseup, mousemove, mouseover, mouseout, 
       mouseenter, mouseleave, change, select, submit, keydown, 
       keypress, keyup, error"; 

(/* selector of user choice */).bind(eventsList, function(){ 

//All operations here.. 
}); 

您可以在这里找到事件的列表... JQuery Events

相关问题