Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tablica referencji do obiektów jako argument funkcji w pętli - problem
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
quarthon
Witam
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:

  1. var t = getElementsByClassName('eff');
  2. for (i = 0; i<t.length; i++) {
  3. Event.observe(window, 'load', function() { new effclass([b] t[i] [/b])});
  4. }


...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 !
  1. Event.observe(window, 'load', function() { new effclass( t[1] )});
  2. Event.observe(window, 'load', function() { new effclass( t[2] )});
  3. 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:
  1. var effclass = Class.create();
  2.  
  3. effclass.prototype = {
  4. options: {},
  5.  
  6. initialize: function(obj)
  7. {


obj to spodziewana referencja - jakiś pomysł ?


Jeszcze dorzucam samą f. getElementsByClassName()
  1. function getElementsByClassName(cn){
  2. var arr = new Array();
  3. var els = document.getElementsByTagName("*");
  4. var exp= new RegExp("^(.* )?"+cn+"( .*)?$", "g");
  5. for (var i = 0; i < els.length; i++ ){
  6. if (exp.test(els[i].className)){
  7. arr.push(els[i]);
  8. }
  9. }
  10. return [b]arr[/b];
  11. }



Pomocy bo szału tu już dostaję smile.gif
lord_t
Jestem prawie pewien ze może Ci pomóc ta stronka, sekcja Clousures and Loops.
quarthon
Takie coś zatrybiło:

  1. for (i = 0; i<t.length; i++) {
  2.  
  3. Event.observe(window, 'load',
  4. function(obj) {
  5. return function(){
  6. new effclass(obj);
  7. }
  8. }(t[i]));
  9.  
  10. };


Wielkie dzięki guitar.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.