Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] setAttribute nie działa w IE
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
dyktek
Napisałem ostatnio kodzik w js, takie ostatnio popularne gwiazdki do głosowania, wynik działania poza IE widać tutaj problem polega właśnie w IE, nie wiem czemu ten kod nie działa pod tym badziewiem, wydaje mi się że problem tkwi w setAttribute, wie ktoś może jak to ominąć?


  1. <head>
  2. <script type="text/javascript">
  3.  
  4. var g_clear = 'g_white.gif';
  5. var g_fill = 'g_green.gif';
  6. var ile = 5;
  7.  
  8. var x = 29;
  9. var y = 29;
  10.  
  11. function $( id ){
  12. return document.getElementById( id );
  13. }
  14.  
  15. function generuj(){
  16. var iden = $( 'ocena' );
  17.  
  18. for( i = 0; i < ile; i++ ){
  19.  
  20. docBody = $( 'ocena' );
  21. element = document.createElement("img");
  22. element.id = i ;
  23. docBody.appendChild(element);
  24.  
  25. incre = i + 1;
  26.  
  27. element.setAttribute("src", g_clear);
  28. element.setAttribute("width", x);
  29. element.setAttribute("height", y);
  30.  
  31. element.setAttribute("onMouseOver", "zmien('"+incre+"');");
  32.  
  33.  
  34. $('ocena').setAttribute("onMouseOut", "czysc();");
  35.  
  36. }
  37.  
  38. }
  39.  
  40. function zmien(nr){
  41. for(i = 0; i < nr; i++)
  42. $(i).setAttribute("src", g_fill);
  43. }
  44.  
  45. function czysc(){
  46. for( i = 0; i < ile; i++ )
  47. $(i).setAttribute("src", g_clear);
  48. }
  49.  
  50. </script>
  51. </head>
  52. <body onload="generuj();">
  53.  
  54. <div id="ocena"></div>
  55.  
  56. </body>
  57. </html>


właściwie to już sobie poradziłem

trzeba było zrobić taki cuś:

  1. if(navigator.appName == 'Microsoft Internet Explorer'){
  2. element.setAttribute("onmouseover", function zaz(){ zmien(this.name); });
  3. element.setAttribute("onmouseout", function dez(){ czysc(); });
  4. } else {
  5. element.setAttribute("onMouseOver", "zmien('"+incre+"');");
  6. $('ocena').setAttribute("onMouseOut", "czysc();");
  7. }
Zajec
Konstrukcja:
Kod
element.setAttribute("onMouseOver", "zmien('"+incre+"');");
jest niepoprawna i działa chyba tylko w Operze. Nie można traktować wartości zdarzeń jako string!

To co zrobiłeś z wykrywaniem przeglądarki jest też złe. A skąd wiesz, że używana przeze mnie Opera nie przedstawia się akurat jako IE? Zaserwujesz mi kod dla IE, czego przecież nie chciałeś.


Kod, który powinien dzialać wszędzie:
Kod
element.onmouseover=function () { zmien(this.name); };
element.onmouseout=function () { czysc(); };
dyktek
poprawiłem i działa

tylko nie wiem dlaczego w operze nie mozna zaznaczyć ostatniej gwiazdki, wynik tutaj, dzięki za pomoc
Zajec
Cytat(dyktek @ 16.08.2006, 12:12 ) *
poprawiłem i działa

tylko nie wiem dlaczego w operze nie mozna zaznaczyć ostatniej gwiazdki, wynik tutaj, dzięki za pomoc

Opera głupieje, ponieważ Twoje oznaczenia "id" rozpoczynają się od cyfry. A to jest niedozwolone wg W3C.
phpion
Pozwalam sobie odswiezyc temat. Mam kod:
  1. var cell8 = row.insertCell(8);
  2. cell8.setAttribute('class', 'green');

Pod Opera oraz FF dziala on poprawnie, natomiast na IE nie koloruje komorki tabeli (klasa green odpowiedzialna jest m.in. za zielone tlo). Wywolanie w ten sposob:
  1. var cell8 = row.insertCell(8);
  2. cell8.class = 'green';

W IE zwraca blad skryptu (na pasku stanu), naotmiast w Operze i FF wogole nie dziala.
Pomoglby ktos w tym problemiku?
Zajec
Cytat(phpion.com @ 29.10.2006, 16:49:56 ) *
Pod Opera oraz FF dziala on poprawnie, natomiast na IE nie koloruje komorki tabeli

Eh, wybić tych od M$ :-|

Spróbuj
Kod
cell8.className = 'green';
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.