Autor Zpráva
preca2
Profil *
Zdravim,
narazil sem na zajímavé chování IE9+ a zajímalo by mě, jestli mi ho někdo dokáže vysvětlit. Živou ukázku bohužel nemůžu dodat a pokud se snažím podobné chování udělat na jednodušším příkladu, vše funguje jak má, takže musí být chyba v tomto konkrétním případě (ale můj kód se mi zdá správný).

Poznámka: Nepotřebuju radu, abych použil jQuery, nebo nějakou knihovnu. Hledám chybu ve svém myšlenkovém pochodu / kódu, případně vysvětlení, proč ten kód funguje tak, jak funguje. A proč se v ostatních prohlížečích chová korektně.

Mam metodu, metoda má vykreslit seznam hodnot. Problém je ten, že v IE sou LI elementy prázdný. Žádná chyba v konzoli neni, při debugování žádná proměnná neni null, ani prázdná. Problém dělá zvýrazněnej řádek. Pokud ho dám pryč, tak se vše krásně zobrazí. Akorát přijdu o referenci na ten element a nechce se mi pokaždý volat getElementById, když už jednou ten element mam.

Ještě sem si všiml, že pokud vytvořím kopii elemntu a ten se pokusim vložit (this.baseEl.appendChild(contestEl.cloneNode(true));), tak se vloží. Jenže když tu kopii uložim, tak je následně zase vykreslen jako prázdný.
I když element uložim potom, co ho vložim do DOMu, tak se zobrazí prázdnej.

Abych to teda shrnul, pokud element uložím do svého objektu, tak se v DOMu vykreslí prázdnej. Tuší někdo, proč by to tak mohlo být? Díky

Ukázka DOMu v prohlížečích.


// v konstruktoru mám: this.contestsEl = {};
// this.baseEl je UL

ContestsNavigationView.prototype.redraw = function () {
            // načtu ID viditelnejch soutěží
            var contestIds = this.store.visibleContestsIds.slice(), contestIdsLength = contestIds.length, message, i, contestId,
                contest, contestEl;

                // iteruju přes výše načtený ID. Pokud element pro danou soutěž už existuje, použiju ho,
                // pokud neexistuje, vytvořim ho a uložim si ho do vnitřní struktury, abych ho příště jen vytáh a nemusel ho dělat znova a abych ho pořád dokola nemusel hledat v DOMu
                for (i = 0; i < contestIdsLength; i++) {
                    contestId = contestIds[i];
                    contestEl = this.contestEls[contestId];
                    if (contestEl == null) {
                        contest = this.store.contests[contestId]; // data
                        contestEl = this.createCardEl(contest); // return document.createElement("li");
                        this.updateContestEl(contestEl, contest); // el.innerHTML = "fffffuuuuuuu";
                        this.contestEls[contestId] = contestEl; // uložení napříště - tenhle řádek dělá problém
                    }
                    this.baseEl.appendChild(contestEl); // contestEl neni null a innerHTML == "fffffuuuuuuu"
                    //this.baseEl.appendChild(contestEl.cloneNode(true)); // takto se element krásně vloží, pokud kopii neuložim
                }
        };
_es
Profil
preca2:
Živou ukázku bohužel nemůžu dodat
Prečo by si „nemohol“? Uložiť stránku v prehliadači a niekam dať tak, aby bola ukážka dostupná snáď dokážeš. Nie sme jasnovidci, aby sme vedeli, čo robia tvoje tajomne nazvané metódy.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0