title: Why does this event handling code for ender break when I try to clean it up some?
body: <p>This is the code that works properly:</p>
  
  <pre><code>bonzo.aug({
    bind: function (event, handler) {
  
      if (this[0].attachEvent)
              this[0].attachEvent('on'+event, handler);
            else
              this[0].addEventListener(event, handler);
          },
    unbind: function (event, handler) {
              if (this[0].detachEvent)
                this[0].detachEvent('on'+event, handler);
              else
                this[0].removeEventListener(event, handler);
            },
    once: function (event, handler) {
            function doOnce(e) {
              bonzo(this).unbind(event, doOnce);
              handler.call(this, e);
            }
            this.bind(event, doOnce);
          }
  });
  </code></pre>
  
  <p>But then when I try to consolidate and soup parts of it up a little, <code>unbind</code> and <code>once</code> break:</p>
  
  <pre><code>(function($){
    $.ieEventApi = !!window.attachEvent; // !-[1,];
  
    $.addEventListener = $.ieEventApi ? "attachEvent" : "addEventListener",
    $.removeEventListener = $.ieEventApi ? "detachEvent" : "removeEventListener",
    $.onForIe = $.ieEventApi ? 'on' : '',
    $.adaptEventHandlerForIe = function(f){
      return function(e){
        e.target = e[(e.target ? e.target : (e.srcElement || document))];
        return f(e);
      };
    };
  
  
  
    $.aug({
      bind: function (event, handler) {
              for(var i = 0; i &lt; this.length; i++) // I'd use Bonzo.each if I could find any documentation for its use.. :-\
                  this[i][$.addEventListener]($.onForIe+event, $.adaptEventHandlerForIe(handler), false); // The "false" is superfluous on IE, but apparently not problematically so.
              return this;
            },
      unbind: function (event, handler) {
                for(var i = 0; i &lt; this.length; i++)
                  this[i][$.removeEventListener]($.onForIe+event, $.adaptEventHandlerForIe(handler), false); 
                return this;
              },
      once: function (event, oncehandler) {
              // This just calls the other two, which already handle iteration.
              this.bind(event, doOnce);
              return this;
  
              function doOnce(e) {
                $(e.target /*Or should I be using e.target here?*/ ).unbind(event, doOnce);
                oncehandler.call(this, e);
              }
            }
    });
  })(bonzo);
  </code></pre>