Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

option.innerText vs. option.text (lov na bugove)

[es] :: Javascript i AJAX :: option.innerText vs. option.text (lov na bugove)

[ Pregleda: 3272 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dc43
Dragoljub Ćurčić
programer, Chinook Software
Subotica, Serbia

Član broj: 19134
Poruke: 50
*.dialup.neobee.net.

Sajt: bogiwoye.info


+2 Profil

icon option.innerText vs. option.text (lov na bugove)22.08.2005. u 07:18 - pre 227 meseci
Kljucne reci: Windows, Visual Studio .NET 2003, C#, JavaScript, HTML, DOM, IntelliSense

Igrajuci se malo sa javascriptom, osecajuci slobodu i samopouzdanje koji se sticu posle niza uspesno napisanih linija koda, menjao sam kod koji radi i dodavao nov.
Nisam tacno primetio kad je poceo da mi javlja greske, ali sam primetio odmah da nemaju smisla.
Prvo mi se javljala greska koja kaze da objekat ne postoji i bio bi pokazan red u kom se samo poziva moja funkcija. Pogledao sam u source od stranice (u browseru) i video da je tamo i moja funkcija. Izbacim taj poziv funkcije i onda mi prijavi neku drugu gresku na vrlo cudnom mestu i nikako mi nije poslo za rukom da otkrijem sta moze praviti gresku.

Evo i kljucnog koda:

Code:

listaObrazovnihProfila.options.length = 0;    // ciscenje liste
var j=0;
for (var i=0; i < obrazovniProfili.length; i++)
{
    if (obrazovniProfili[i][0] == sifraPodrucjaRada)
    {
        var opt = document.createElement('option');
        opt.value = obrazovniProfili[i][1];
        opt.innerText = obrazovniProfili[i][2];
        listaObrazovnihProfila.options[j]=opt;
        j++;
    }
}


Greska se javljala kako u IE6, tako i u Firefox-u. Najvise me nerviralo to sto nije imala smisla.
Pokusao sam svasta i na kraju cak sa eliminacijom sadrzaja stranice, malo po malo, pomocu "online workspace-a". Javljala mi se greska na redu koji dodaje <option> element u niz options <select> elementa "listaObrazovnihProfila.options[j]=opt;". Tekst greske je bio medju onim najnejasnijim porukama, i glasio je "Object doesn't support this property or method". Ono sto je cinilo gresku vrlo misterioznom je sto je ranije isti taj kod radio sasvim dobro. Combobox (<select>)listaObrazovnihProfila je postojao i uopste nisam razumeo zasto se javljala ta greska.

obrazovniProfili je jedan niz i on je prilicno dugacak, tacnije ima 453 elementa, a svaki element je niz duzine 4 elementa/podatka - npr. "new Array(3, 16, 'neki string', 4)" je jedan on onih 453 elementa. Zato kada pristupam tom nizu koristim dve uglaste zagrade "obrazovniProfili(i)[2]". Morao sam koristiti obicne zagrade zbog toga sto ne znam da zastitim tekst od bolesti tagova = italic.
Prosto volim da objasnjavam, ovo nema nikakve veze sa bugom.

Eliminacijom delova tog velikog niza, samo dospeo do takve velicine niza da ne prouzrokuje gresku, ali to nije imalo nikakvog smisla. Granica izmedju ostavljenog dela niza i izbacenog je bio red koji glasi ovako "new Array(0, 0, 'Nepoznat', 0)". Kada sam taj red izbacio iz niza obrazovniProfili, onda nije prijavio nikakvu gresku.

Sad sigurno pretpostavljate da sam morao biti blizu resenja.

Ali nisam.

Ni blizu.

Pa onda kako sam dosao do resenja? Kao sto se cesto dodje: slucajno. Izmenio sam onaj red koji kaze "opt.innerText = obrazovniProfili(i)[2];" da bude "opt.text = obrazovniProfili(i)[2];", kao sto mi je i ranije bilo. I radilo je bez greske.
Zasto sam uopste promenio kod da koristi innerText property, umesto text propertya? Zato sam kontao da je svejedno i mislio sam da ce i tako raditi. Ali ne bih se ja ni setio da nije IntelliSense-a u VS.NET-u, tj. HTML pogledu stranice, kada se edituje HTML i JavaScript kod. IntelliSense? Bolje reci IntelliNonsense.
Mislim da sam otkrio neki bug, ali verovatno nisam. Verovatno sam jednostavno lose koristio JavaScript, DOM itd.

Nadam se da ce nekome ova prica biti od koristi.

Voleo bih takodje da pozovem ljude da ne koriste forume samo za postavljanje pitanja. Ovaj tekst nudim kao primer, sad kad sam ga vec napisao :)


Programming kicks ass!
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
194.247.222.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: option.innerText vs. option.text (lov na bugove)22.08.2005. u 08:25 - pre 227 meseci
Code:
listaObrazovnihProfila.options.length = 0;    // ciscenje liste
var j=0;
for (var i=0; i < obrazovniProfili.length; i++)
{
    if (obrazovniProfili [i] [0] == sifraPodrucjaRada)
    {
        listaObrazovnihProfila.options [j++] = new Option (obrazovniProfili [i] [2], obrazovniProfili [i] [1]);
    }
}

 
Odgovor na temu

dc43
Dragoljub Ćurčić
programer, Chinook Software
Subotica, Serbia

Član broj: 19134
Poruke: 50
*.dialup.neobee.net.

Sajt: bogiwoye.info


+2 Profil

icon Re: option.innerText vs. option.text (lov na bugove)29.08.2005. u 14:57 - pre 226 meseci
Vrlo zgodno rešenje noviKorisniče!

Čini mi se da sam naišao i na takav način kreiranja liste opcija. Čini mi se i da je ovaj način sa CreateElement noviji i da ga stariji browseri ne razumeju. Ipak, to je W3C DOM Level 1. Browseri se uglavnom trude da podržavaju ono što se podrazumeva pod W3C DOM. Tako sam barem ja shvatio. Odlučio sam da za sada, dok imam većih zadataka, ne radim prilagodjavanje javascripta raznim verzijama raznih browsera. Pošto će mi svi korisnici biti dostupni, moći ću ih kontaktirati i narediti im koji browser da koriste :)
 
Odgovor na temu

[es] :: Javascript i AJAX :: option.innerText vs. option.text (lov na bugove)

[ Pregleda: 3272 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.