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.

Original source