2

can I bind all the available events to an element

$('body').on('all available events', '.element', function(e) {
  if (e.type == 'click') {
    // do something...
  } 
  else if (e.type == 'change') {  
    // do something else...
  }
});  

I do not want to give them individually like

$('body').on("change click", '.element', function(e) {...});
ozil
  • 6,930
  • 9
  • 33
  • 56

3 Answers3

3

I'll not recommend you to do that, but if you want to:

$('body').on('blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu', function(e) {
    // Your code here
});

Reference: https://github.com/jquery/jquery/blob/master/src/event/alias.js#L6

Tushar
  • 85,780
  • 21
  • 159
  • 179
2

Seems like a bad idea, but you could get all the available event on an element by running Object.keys on it, and filtering out everything that starts with on....

To pass it to jQuery, the on... part has to be removed as well

var props = Object.keys(document.body).filter(function(x) {
    return x.indexOf('on') === 0;
}).map(function(x) {
    return x.replace('on','');
}).join(" ");

$('body').on(props, '.element', function(e) {
    console.log(e.type)
});

FIDDLE

In my browser that would bind the event handler to

unload
storage
popstate
pageshow
pagehide
online
offline
message
languagechange
hashchange
beforeunload
scroll
resize
load
focus
error
blur
autocompleteerror
autocomplete
waiting
volumechange
toggle
timeupdate
suspend
submit
stalled
show
select
seeking
seeked
reset
ratechange
progress
playing
play
pause
mousewheel
mouseup
mouseover
mouseout
mousemove
mouseleave
mouseenter
mousedown
loadstart
loadedmetadata
loadeddata
keyup
keypress
keydown
invalid
input
ended
emptied
durationchange
drop
dragstart
dragover
dragleave
dragenter
dragend
drag
dblclick
cuechange
contextmenu
close
click
change
canplaythrough
canplay
cancel
abort
webkitfullscreenerror
webkitfullscreenchange
wheel
selectstart
search
paste
cut
copy
beforepaste
beforecut
beforecopy

adeneo
  • 312,895
  • 29
  • 395
  • 388
0

You should not bind all events to your handler, because you don't know what "all" is, thus it is bad practice for almost all applications. Also, you cannot bind to all events, because addEventListener which is used internally in jQuery requires you to state the type to listen to. Even if you have a list of "all" events, there can still be custom events defined which have their own arbitrary names.

Betamos
  • 26,448
  • 9
  • 23
  • 28