In the documentation of Ext.Element.addListener(), the second parameter to the handler function fn(evt, el, obj) should be an Ext.Element.

Instead, the handler receive the HTML element that received the event. In addition, if the HTML element that received the event was a child of the element on which the handler has been set up, that child element is given to the handler, not the element on which the handler has been set up.

I don't know if this is the intended behaviour, but then the documentation should be fixed.... This is rather confusing ;-).

addListener doesn't work like that. If you call, for example, panel.addListener(eventName, handlerFn, scope), the parameters that handlerFn receives are totally dependent on what eventName is. Let me demonstrate it with a gridpanel:

As you can see, the functions parameters, as bolded, are different depending on what the event really is. So, the (evt, el, o) parameter set that is mentioned in the addListener() API documentation is misleading and cannot be used. Instead, you need to refer to the specific event definition to see what kind of parameters your event handler will receive. In the API documentation, you just have to scroll down to the 'Public Events' section; the parameters definitions are there for each event that the component supports.

Fine. Ext.Element that is. But I stand corrected that is if you scroll down to Public Events section in API page for Ext.Element, all the events expect HtmlElement as the 2nd parameters. What I said about refering to event definition instead of what told in addListener() definition is the truth.