event listeners don't pass arguments: the event object is generated by the browser and passed as the first and only argument.
if you want to reach other data, give the data a name and point your handler to that name.
if you are adding many handlers to many elms in a loop, it can be slightly complicated.
in that case, i would use Array.map instead of the for, and your variables will magically line up when the handler fires later because map() uses a function, and the function has its own scope, unlike a for-loop routine where all handlers inherit the same scope.
you can use jQuery's map() to accomplish the same thing in old-school browsers.
BROWSER STATS [% share]
(2013/10/31) IE7:0.5, IE8:8.6, IE9:5.3, IE10:12.3, FF:17.7, CH:41.8, SF:8.1, MOBILE:20.4