Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ie7 - problem - pojawiający się z nikąd text node ze spacją jako nodeValue
dziadoo
post 13.03.2008, 22:29:23
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.11.2007

Ostrzeżenie: (0%)
-----


Witam,
Bardzo proszę o pomoc, gdyż już od 2 tygodni staram się znaleźć jakieś rozwiązanie mojego problemu. I jak na razie zlasowałem sobie mózg i nic więcej.
Oto opis problemu.

Kombinuję stronkę sklepu internetowego. Działanie sklepu oparte jest na ajxie bez żadnej biblioteki w phpie czy js. Jak dotąd szło dobrze, gdybym nie sprawdził jak wygląda to w ie7.
Mam taki skrypcik dotyczący koszyka, może nie śmiga jeszcze do końca, ale to dlatego że stanąłem w miejscu przez ten problem.
daję w znaczniku php bo jak widzę js nie ma:). Proszę o cierpliwość jestem raczej swieży:)
Kod
Koszyk = {};


Sprawa w FF wygląda tak że koszyk śmiga.
A teraz problem.
Otórz pod ie7 w momencie gdy w koszyku już posiadam produkty mam możliwość ich usuwania.
Problem pojawia się w tej linijce
Kod
this.suma_cena = this.suma_cena - del_node.parentNode.childNodes[2].firstChild.nodeValue;
gdyż z jakiś powodów i nie wiem skąd ie7 dodaje dodatkowego noda - nodeType = 3(text) z wartością pustą a dokładniej spacją gdyż sprawdziłem charCodeAt(0)=32.
Lista produktów w kodzie html czy xhtml wygląda następująco:
  1. ....
  2. ....
  3. <div id="koszyk">
  4. <div id="prod1">
  5. <div>1</div>
  6. <a href="#jakislink">Nazwajakiegos produktu</a>
  7. <div>180.00 zł</div>
  8. <div>1</div>
  9. </div>
  10. <div id="prodid2">
  11. .................
  12. ..............itd
  13. ............itp
  14. </div>

Jeśli chodzi o wstawianie nowych produktów przez moją funkcję koszyka Koszyk.dodaj() to juz sprawdzałem czy nie ma zbędnych spacji pomiędzy
Kod
var lista_kosz = "<div id='kosz_prod_" + id_kosz + "'><div>" + this.l_p_kosz + "</div><a href=#kosz_prodid=" + id_kosz + ">" + nazwa_kosz + "</a><div>" + cena_kosz + "</div><div>" + ilosc_kosz + "</div>" + this.usun_prod_ico + "</div>";
?>
i kombinowałem różne inne mozliwości.
Sytuacja jest taka że w najlepszym podejściu jeśli usuwam produkty po kolei czyli od ostatniego do tego pierwszego na liście to problem sie nie pojawia. Ale nie zawsze. Ale zawsze jest tak że jeśli chce usunąć pierwszy produkt na liście to jest lipton. I zawsze jest tak że wszystkie sie usuną tylko nie pierwszy.
Czyli w 90% pierwszy produkt zostaje gdyż ie7 wywala błąd no i zatrzymuje dalsze działanie skryptu który i tak juz by nie śmigał bo w miejscu gdzie nodem powinien być div z ceną pojawia się nie wiadomo skąd nowy node z wartościa spacji.
Odpalałem skrypt pod firebugiem i nodów jest tyle ile trzeba. odpalałem pod debugerrem pod ie co się zowie IE Web Developer i co śmieszne on też nie widzi w podglądzie kodu tego pustego noda.
Więc ogólnie zgłupiałem.
Tyle na ten temat.
Proszę o pomoc bo przeszukałem cały internet heheheh i jak na razie to znalazłem milion innych bugów i kombinacji, lecz żadna mi nie pomogła.
Pozdrawiam

Ten post edytował dziadoo 1.04.2008, 16:27:59
Go to the top of the page
+Quote Post
nevt
post 13.03.2008, 23:04:51
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


nie ma znacznika [ js ] ale jest znacznik [ code ] ...
spróbuj zrobić tak:
Kod
Koszyk.usun = function(del_node)
{
    var rem_elem = del_node.parentNode.id;
    var values = del_node.parentNode.getElementsByTagName('div');
    this.suma_cena = this.suma_cena - values[1].firstChild.nodeValue;
    this.suma_ilosc = this.suma_ilosc - values[2].firstChild.nodeValue;
    document.getElementById("basket").removeChild(document.getElementById(rem_elem));
    Koszyk.pokaz_zawartosc();
    Koszyk.pokaz_link();
}

w ten sposób powinieneś odfiltrować "nody widma"

gdyby jednak okazało się, że to values[...].firstChild też zwraca "noda widmo" to zmień jeszcze te dwie linijki:
Kod
    this.suma_cena = this.suma_cena - parseFloat(values[1].innerHTML);
    this.suma_ilosc = this.suma_ilosc - parseInt(values[2].innerHTML);


Ten post edytował nevt 13.03.2008, 23:13:03


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
dziadoo
post 14.03.2008, 01:35:03
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.11.2007

Ostrzeżenie: (0%)
-----


Już poprawiłęm na code..
Dzięki za pomoc. Tak prosty sposób ale nie wpadłem na to... choć jest to troszkę obejście tematu.. gdyż wcześniej też miałem ten problem ale przerobiłem funkcyjkę i problem zniknął.
Więc nasuwa mi się pytanie czy jest jakiś inny sposób żeby ominąć te "nody widma". Tzn jak sobie z nimi radzić gdy nie da się w łatwy sposób ich obejść.
Czy winą może być innerHTML, gdyż czytałem gdzieś że nie do końca jest on zgodny ze standardem DOM? Czy może każda z funkcji dotycząca DOM może generować takie widma nody?? Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 12:54