dwie doby spędza mi problem sen z powiek i może ktoś zna odpowiedź.
Mam sobie funkcję getElementsByClassName(), która po wprowadzeniu nazwy klasy zwraca mi tablicę elementów.
Chcę wywoływać funkcję przez prototype Event.observe w taki sposób:
var t = getElementsByClassName('eff'); for (i = 0; i<t.length; i++) { Event.observe(window, 'load', function() { new effclass([b] t[i] [/b])}); }
...aby przypisać obsługę zdarzeń do wielu elementów (wyróżnionych nazwą klasy)
w firebugu mam, że obiekty są puste - tj puste docierają jako argument funkcji (błąd JS)
element is undefined (prototype.js)
Line 3936
ale samo t jest niepustą tablicą.
Żeby uciąć spekulacje o samej klasie powiem, że wywołanie poniższego kodu (gdy zamiast iteratora wpiszemy indeks t z palca) działa !
Event.observe(window, 'load', function() { new effclass( t[1] )}); Event.observe(window, 'load', function() { new effclass( t[2] )}); Event.observe(window, 'load', function() { new effclass( t[3] )});
Problem leży jakby w tym, że konstruktor nie dostaje tego elementu,
jeśli w tą pętlę wstawię np:
t[i].style.left = 10*i+"px"; to też mi zadziała.
nagłówek klasy:
var effclass = Class.create(); effclass.prototype = { options: {}, initialize: function(obj) {
obj to spodziewana referencja - jakiś pomysł ?
Jeszcze dorzucam samą f. getElementsByClassName()
function getElementsByClassName(cn){ var arr = new Array(); var els = document.getElementsByTagName("*"); var exp= new RegExp("^(.* )?"+cn+"( .*)?$", "g"); for (var i = 0; i < els.length; i++ ){ if (exp.test(els[i].className)){ arr.push(els[i]); } } return [b]arr[/b]; }
Pomocy bo szału tu już dostaję
