jQuery's One - Fire once with multiple event types
events, javascript, jquery
Solution
Instead of using `.one`, use `.on` and remove the binding manually with `.off`.
$('input').on('mouseup keyup', function(e){
console.log(e.type);
$(this).off('mouseup keyup');
});
Fiddle: http://jsfiddle.net/23H7J/3/
This can be done a little more elegantly with namespaces:
$('input').on('mouseup.foo keyup.foo', function(e){
console.log(e.type);
$(this).off('.foo');
});
This allows us to use a single identifier (foo) to remove any number of bindings, and we won't affect any other mouseup or keyup bindings the element may have.
Fiddle: http://jsfiddle.net/23H7J/41/
Problem
Is there a way to fire a single function once when any event is raised? For example, if I have the following function: (demo in jsfiddle) ``` $('input').one('mouseup keyup', function(e){ console.log(e.type); }); ``` I'd like to only call the function once, regardless of which event fired it. But according to the docs for `.one()`: If the first argument contains more than one space-separated event types, the event handler is called once for each event type. So, currently the function will fire once for each event type.