evo vec neko vreme pokusavam da otkrijem zasto mi firefox ne prosledjuje event parametar fji koju mu dam u addEventListener ali ne mogu da uocim gresku (a i nema tu bas mesta za greske..)
dakle imam $bind fju koja izgleda ovako:
Kôd:
var $bind = function(element, event, listener)
{
if (!element.nodeType && element.length)
for (var i = 0; i < element.length; i++) $bind(element[i], event, listener);
else if (element.addEventListener)
element.addEventListener(event, function(){ return listener.apply(this, arguments); }, false);
};
i recimo da ocu da vezem handler za click dogadjaj na sve elemente sa klasom foobar:
Kôd:
$bind($class('foobar'), 'click', function(event)
{
console.log(this); // ovo je ok
console.log(event); // stampa praznu liniju
console.log(arguments); // stampa [ ] (dakle prazan array)
});
$class fja koja se pominje u kodu vraca niz elemenata koji imaju trazenu klasu, ona radi posao tj ne pravi ona problem sigurno, evo koda:
Kôd:
var $class = function(className, parent)
{
return (document.getElementsByClassName) ? // try to use native function if available (firefox 3)
(parent || document).getElementsByClassName(className) :
$xpath("child::*[contains(concat(' ', @class, ' '), ' " + className + " ')]", parent);
};
var $xpath = function(query, parent)
{
var result = [];
parent = parent || document;
if (!parent.nodeType && parent.length)
for (var i = 0; i < parent.length; i++) result = result.concat($xpath(query, parent[i]));
else
{
var xpr = document.evaluate(query, parent, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0, length = xpr.snapshotLength; i < length; i++) result.push(xpr.snapshotItem(i));
}
return result.slice();
};
ima li neko ideju zasto ne dobijam event objekat?
samo da napomenem da mi ovo treba samo za firefox, cross-browser resenja mi nisu potrebna