Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] ie, nodes, css on fly
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
dem
Witam,

Dawno mnie tu nie było, a potrzebuje pomocy.

Otóż robie projekt na uczelni w JS, gdzie sa tworzone divy w locie etc etc - czyli szmery i bajery.
Moj problem polega na tym, ze jesli robie

  1. var newDiv = document.createElement("div");
  2. newDiv.setAttribute("class", "test");


i wrzucam to do jakiegos wezla, to pod ie nie "dodaje" klasy "test", opisanej w css, przez co dany div nie jest sformatowany tak jak bym sobie tego zyczył.

To samo dotyczy eventow dodawanych przez setAttribute (np onfocus).

Moje pytanie brzmi, czy jest jakies stanowisko MS dlaczego to nie smiga?
musze przygotowac sprawko z tego projektu a nie moge go oddac dopoki nie ustosunkuje sie do tego problemu(dlaczego pod ie nie dziala tak jak powinno)

Lub czy może istnieja jakies eleganckie metody ominiecia tych bledow.
Przyznaje ze z JS mialem nie duzo do czynienia a jego "zorientowana obiektowosc" mnie przeraza, a raczej smieszy.

bede wdzieczny za pomoc i wskazowki... i wsumie jakby moglby mi ktos lopatologicznie wytluamczyc idee http://www.quirksmode.org/js/events_advanced.html ...

ps. probowalem szukac za pomoca szukajki ale nie znajduje mi wynikow dla "ie css on fly" i podonych zapytan

ps2.
w czym problem? najlepiej spojrzec w ff a potem w ie:
http://iem.pw.edu.pl/~ostrowsb/indywidualny/
erix
Cytat
To samo dotyczy eventow dodawanych przez setAttribute (np onfocus).

A ustalane własności przez:
Kod
div.className = 'klasa';
div.onfocus = function(e){ ... }

Też się sypie?
dem
super... wlasnie takiej odpowiedzi oczekiwalem!

a czy moglbys mnie nakierowac teraz jak rozwiazac analogiczny problem tylko ze z atrybutem "name" ?

pogooglowalem troche i znalazlem http://www.thunderguy.com/semicolon/2005/0...ernet-explorer/

ale szczerze powiedziawszy licze na to, ze znow jest jakies tak sprytne rozwiazanie (ktorego nie moglem znalesc) jak z className..

pozdrawiam i dziekuje za pomoc ;]

edit:

chodzi o to ze nadanie name poprzez
Kod
setAttribute

lub
Kod
input = document.createElement("input");
input.name = "name"

nie dziala jak powinno w IE... nadal mozna zaznaczyc kilka inputow typu radio, pomimo takiego samego name

edit2:

chyba jednak bede musiał skorzystać z tamtej metody .. no nic.. dziekuje za pomoc ;]
erix
Powiem tak - IE jest tak głupi, że po ludzku do niego gada, a ten wie swoje - bawiłem się ostatnio DOM pod IE i iterowałem pętlą wszystkie elementy w danym obiekcie (chciałem przenieść; removeNode + wstawianie do innego elementu). Nie "łapało" mi ostatniego; a gdy ustawiałem po indeksach numerycznych - sypało błędami.

Rozwiązaniem było innerHTML.

Do czego piję:
Kod
input = document.createElement("input");
input.name = "name"

spróbuj:
Kod
input = document.createElement("input");
input.outerHTML = '<input name="asd" />';
dem
Cytat(erix @ 12.06.2009, 16:44:45 ) *
Powiem tak - IE jest tak głupi, że po ludzku do niego gada, a ten wie swoje - bawiłem się ostatnio DOM pod IE i iterowałem pętlą wszystkie elementy w danym obiekcie (chciałem przenieść; removeNode + wstawianie do innego elementu). Nie "łapało" mi ostatniego; a gdy ustawiałem po indeksach numerycznych - sypało błędami.

Rozwiązaniem było innerHTML.

Do czego piję:
Kod
input = document.createElement("input");
input.name = "name"

spróbuj:
Kod
input = document.createElement("input");
input.outerHTML = '<input name="asd" />';


ehh, dopiero teraz znalazlem chwile zeby do tego przysiasc... nie za bardzo rozumiem o co chodzi z outerHTML ;] pogooglowalem, zauwazylem ze outerHTML zwraca "caly znacznik" wraz z innerHTML, ale proba przypisania
Kod
input.outerHTML = "<nowa definicja inputa>";

nie chce zaskoczyc w ie.

No i urodzil sie jeszcze jeden problem odnosnie wykorzystywania anonimowych funkcji przy eventach.
Otóż w moim "projekcie", wstawialem na sztywno (za pomoca setAttribute - a na sztywno bo nie moge "zapisac" referencji do obiektu w html tongue.gif) dany event do nowo utworzonego "[html object]", ktory mial odrazu ustawione argumenty, dzieki ktorym identyfikowalem obiekt danej klasy... przyklad

aby zmieniac pozycje okien (poprzez przytrzymanie wcisnietej myszki nad tytulem) stosowalem
Kod
newTitle.setAttribute("onmousedown", "moveDivMouseDown(\""+this.etykieta+"\")");

i dzialalo to jak nalezy(w ff oczywiscie), w momencie gdy chce zastosowac
Kod
newTitle.onmousedown = function(){ moveDivMouseDown(this.etykieta) }

pojawia sie problem natury czysto technicznej... w momencie zajscia onmousedown, nie istnieje taka zmienna jak this.etykieta (zmienna identyfikujaca obiekt Okno wsrod wielu okien), bo przeciez w danym momencie nie mam dostepu do zadnego obiektu typu okno, ktory takowa zmienna posiada
co skutkuje brakiem identyfikacji okna po mouse* event w odrebie "okna"

potrzebuje miec ustawione argumenty na sztywno, bo idea projektu to miedzyinnymi obsluga wielu okien naraz.

jakis pomysl jak sobie z tym poradzic?

moze jednak napisac jakies madre zdanie do sprawka ze ie sux questionmark.gif
chociaz prowadzacy laby tego nie zrozumie... ale to juz inna historia biggrin.gif
erix
Cytat
pojawia sie problem natury czysto technicznej... w momencie zajscia onmousedown, nie istnieje taka zmienna jak this.etykieta (zmienna identyfikujaca obiekt Okno wsrod wielu okien), bo przeciez w danym momencie nie mam dostepu do zadnego obiektu typu okno, ktory takowa zmienna posiada
co skutkuje brakiem identyfikacji okna po mouse* event w odrebie "okna"

No stary, pomyśl nieco. [; Obiektówka w JS jest zaista:
Kod
var obj = this;
newTitle.onmousedown = function(){ moveDivMouseDown(obj.etykieta) }


Cytat
nie chce zaskoczyc w ie.

Spróbuj wskoczyć na węzeł rodzica i przez innerHTML coś pomodzić.
dem
dzizas, czlowieku, nie wiem z jakich kursow sie uczyles JS, ale prosze Cie, zapodaj mi linki ! biggrin.gif

mam nadzieje, ze z czasem zlapie swiadomosc JS, tak jak ty - moze wszystko przez negatywne nastawienie do JS ;]

poki co musze przerobic pare rzeczy, zapewne jeszcze tu wroce ;]

w kazdym badz razie, dzieki wielkie...

dla potomnych majacych problem z atrybutem name polecam ta funkcje:
Kod
function createNamedElement(type, name) {
   var element = null;
   // Try the IE way; this fails on standards-compliant browsers
   try {
      element = document.createElement('<'+type+' name="'+name+'">');
   } catch (e) {
   }
   if (!element || element.nodeName != type.toUpperCase()) {
      // Non-IE browser; use canonical method to create named element
      element = document.createElement(type);
      element.name = name;
   }
   return element;
}

z strony http://www.thunderguy.com/semicolon/2005/0...ernet-explorer/
erix
Cytat
dzizas, czlowieku, nie wiem z jakich kursow sie uczyles JS, ale prosze Cie, zapodaj mi linki !

MDC + analiza źródeł najpopularniejszych bibliotek + kodzenie. [;

Cytat
mam nadzieje, ze z czasem zlapie swiadomosc JS, tak jak ty - moze wszystko przez negatywne nastawienie do JS ;]

Gdyby kiedykolwiek jakiś język server-side ze składnią server-side zdobył popularność (pomijam ASP ;p), bym skakał z radości. [;

Swoją drogą, nie wiem czemu Ty się męczysz w czysty DOM zamiast jakiegoś frameworka. No chyba, że masz tak w wymaganiach, ale teraz klepanie wszystkiego od zera jeśli chodzi o JS nie ma za bardzo sensu...
dem
Cytat(erix @ 13.06.2009, 09:50:51 ) *
Swoją drogą, nie wiem czemu Ty się męczysz w czysty DOM zamiast jakiegoś frameworka. No chyba, że masz tak w wymaganiach, ale teraz klepanie wszystkiego od zera jeśli chodzi o JS nie ma za bardzo sensu...


szczerze powiedziawszy, to ja sobie narzucilem takie wymagania, bo nauczylem sie juz, ze jesli ogarne cos w "golym jezyku" to potem bede lykal frameworki bez problemu ;]
Nastepnym "projektem" dla mnie jest wlasnie zaznajomienie sie z potega frameworkow, by nie pisac od zera ;]

byc moze popelniam blad w tym toku rozumowania, ale zawsze szedlem pod gore ;]
erix
Wiesz, po części masz rację.

"Goły" DOM przydaje się w expressions dla IE. tongue.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.