TOPlist

Pixylophone - komentáře

Komentáře (od nejstarších po nejnovější)

Komentáře k příspěvku Zapeklitý javascriptový problém s IE5


[1] Vložil(a): Ondrej Ivanic, 2004-08-28, 02:25 Solo | MuteČtenáři: ---

skus takto:

function newItem() {
   var sel = document.getElementById('ADD');
   var inp = document.getElementById('NEWADD');
   var opt = document.createElement('OPTION');
   opt.value = inp.value;
   opt.text = inp.text;
   sel.add(opt);
}

[2] Vložil(a): lukas, 2004-08-28, 02:30 Solo | MuteČtenáři: ---

Me to teda nefunguje ani v IE6 a Mozille. Textovy input IMHO vlastnost "text" nema (a jaky by mel byt rozdil mezi inp.value a inp.text? uzivatel do inputu zada je jeden textovy retezec...) Ma jenom value.

[3] Vložil(a): Ondrej Ivanic, 2004-08-28, 02:40 Solo | MuteČtenáři: ---

[2] nebol by som si taky isty ze inp je tag "input" :)
s kludmin svedomim to moze byt dalsi select. Ved je to celkom normalne mat dva a prehadzovat medzi si polozky.

Ak je to input tak potom tam raidok "opt.text = inp.text;" nema co hladat. Ja som ho tam nechal. lebo pixy ho tam mal...

[4] Vložil(a): Paul, 2004-08-28, 03:32 Solo | MuteČtenáři: ---

Zajímavé, mě uvedený kód funguje v MSIE 5.01 bez chyby, ale musel jsem
 to upravit takto:
var opt = new Option(inp.value);
jinak se nepřenášela hodnota do optionu.

Zkus si vypsat a potom zvalidovat kód pomocí javascript:'<xmp>'+document.documentElement.outerHTML+'</xmp>'; v adresovém řádku MSIE

[5] Vložil(a): Yuhů [web], 2004-08-28, 04:24 Solo | MuteČtenáři: ---

Reaguji na [3]: ten text v inputu. inp.text mi fakt přijde jako blbost, má tam být asi name, to by dávalo smysl.

[6] Vložil(a): Yuhů [web], 2004-08-28, 04:36 Solo | MuteČtenáři: ---

Takže výsledek testu je tento:

chybu nelze nasimulovat

Vytáhnul jsem veškerej prohlížečovej šrot, co mi tu na disku leží, a ve všem to funguje. Včetně zmíněného IE5 Win a v sedmičkové Opeře (šestku nemám). Připouštím ovšem, že to testuju pouze na emulaci IE5 vedle IE6. Jestli to děláš taky tak, tak pozor, tyhle emulace bejvaj pošahaný a někdy se můžou chovat jako IE6.

Samozřejmě je tam ten detail s neexistující hodnotou inp.text, ale ani pak to chybu nehází, prostě je to undefined.

Doporučil bych skutečně vyjet si ten skript přes bookmarklet s <xmp>, jak to doporučil Paul [4].

[7] Vložil(a): pixy [web], 2004-08-28, 09:58 Solo | MuteČtenáři: ---

MOC SE OMLOUVÁM - je vidět, že už jsem byl ospalý. Pochopitelně nikde žádné input.text nepoužívám, mělo tam být input.value (tedy value i text v option stejné).

ad [1] > Obojí jsem zkoušel, Ondřeji - i createElement(), i select.add(), i všechny myslitelné kombinace... Marně.

ad [4], [6] > Díky za tip, to opravdu funguje a neznal jsem to. Omluvte mou neznalost, ale co to je <xmp>??? Yuhůů, nechceš o tom něco napsat?

[8] Vložil(a): honck [web], 2004-08-28, 09:59 Solo | MuteČtenáři: ---

co takhle?:function newItem() {
   var sel = document.getElementById("ADD");
   var inp = document.getElementById("NEWADD");
   var opt = document.createElement("OPTION");
   opt.value = inp.value;
   var txt = document.createTextNode(inp.value);
   opt.appendChild(txt);
   sel.appendChild(opt);
}

[9] Vložil(a): honck [web], 2004-08-28, 10:00 Solo | MuteČtenáři: ---

[s entrem za tou dvojteckou by to bylo hezci :o)]

[10] Vložil(a): Martin Trčka, 2004-08-28, 10:09 Solo | MuteČtenáři: ---

<xmp> je něco jako <pre>, ale s tím rozdílem, že se text uvnitř bere jako holý text a ne jako HTML. Příklad: <xmp><b>XXX</b></xmp> se zobrazí (neproporciálním písmem apod.) jako <b>XXX</b> a ne jako tlustý XXX.

Zdroj: Google (xmp internet explorer)

A v nějaké z posledních verzí Opery tenhle "nesystémový" tag implementovali taky.

[11] Vložil(a): met [web], 2004-08-28, 11:57 Solo | MuteČtenáři: ---

Na tvem skriptu nevidim nic spatneho.
Dle tveho popisu, bych se blize podival, co mas obsazeno v promenne sel
alert(sel.nodeName)
Zda je v ni opravdu to, co ma byt. Kdyz mas dokument tak neprehledny, jak rikas, snadno se ti do nej mohlo dostat druhe id="ADD" nebo neco podobneho.

[12] Vložil(a): Lukas, 2004-08-28, 15:34 Solo | MuteČtenáři: ---

Pro pobaveni: http://www.hackles.org/strips/cartoon280.png

[13] Vložil(a): llook [web], 2004-08-28, 19:38 Solo | MuteČtenáři: ---

ad <XMP>)
V květnu o tom psal Chose:
http://www.chose.cz/weblog/1085699940-chcete-vedet-jak-vypada-vystup-z-javascriptu.html
Sám ten bookmarklet odtamtaď často používám, když blbnu s js.

[14] Vložil(a): spaze, 2004-08-28, 20:17 Solo | MuteČtenáři: ---

v opere je treba zapnout JS konzoli, resp. zobrazovani JS konzole pri chybe (nepodcenuji autora pochopitelne ;) a na generovanej kod je dobry treba http://www.thundermain.com/code/FullSource.aspx ci Instant Source http://www.BlazingTools.com, oba dva dokazi zobrazit kod, toho co je prezentovano na screenu

[15] Vložil(a): Leo, 2004-08-28, 20:33 Solo | MuteČtenáři: ---

Jenom napad - zkuste vyhodit deklarace lokalnich promennych - misto

var sel = ...
sel = ...

ale nejspis to nepomuze.

A pak misto

sel.length

bych osobne dal

sel.options.length

Leo

Kdyby byl problem v tom, tak by alert(sel.options.length)

[16] Vložil(a): Leo, 2004-08-28, 20:42 Solo | MuteČtenáři: ---

Ten konec mel byt neco v to smyslu, ze nejlepsi je test pomoci alert(sel.options.length) vs. alert(sel.length). Leo

[17] Vložil(a): pixy [web], 2004-08-28, 21:10 Solo | MuteČtenáři: ---

ad [16] > Tim už jsem si taky prošel. Obě hodnoty fungují stejně...

[18] Vložil(a): Leo, 2004-08-28, 21:46 Solo | MuteČtenáři: ---

Toz takhle:

function newItem() {
   var sel = document.getElementById('ADD');
   var inp = document.getElementById('NEWADD');
   var opt = new Option();
   opt.value = inp.value;
   opt.text = inp.value;
   sel.options.add(opt,sel.options.length);
 }

Pokud ma novy option prijit na konec.

Leo

[19] Vložil(a): honck [web], 2004-08-29, 09:39 Solo | MuteČtenáři: ---

jsem zmaten. cetl me nekdo? viz [8] to nefunguje? zda se mi jako jedine spravne reseni. jak pro msie, operu ci mozillu.

[20] Vložil(a): Petr Bříza, 2004-08-29, 14:00 Solo | MuteČtenáři: ---

Pokud se pamatuji, tak kontruktor objektu Option má nepovinné parametry za sebou value a text. Takže místo přiřazování těchto vlastností až po vytvoření zkuste vytvořit objekt nějak takto:
var tempOpt = new Option(value, text);
Teď jsem to nezkoušel, a nic jiného mě nenapadá...

[21] Vložil(a): Leo, 2004-08-29, 18:03 Solo | MuteČtenáři: ---

Tady nikdo necte, vsichni jen piseme :-) Leo

[22] Vložil(a): pixy [web], 2004-08-29, 21:46 Solo | MuteČtenáři: ---

ad [19] > Jasně, že jsem to četl. Neměl jsem čas to vyzkoušet, ale pochypuju, že to pomůže.

Prosím všechny: já se neptal na to, jak udělat nový option - to umím asi pěti, možná více různými způsoby. Já se ptal na to, jestli někdo nemá zkušenost s tím, že i když taková konstrukce (podle všeho naprosto korektní) funguje v IE6, v Mozille i leckde jinde, tak že nefunguje v IE5. Jestli nemáte zkušenost s tím, že by to mohla způsobit nějaká chyba v syntaxi, nebo něco jiného, na co se těžko přichází...

[23] Vložil(a): Leo, 2004-08-30, 00:29 Solo | MuteČtenáři: ---

"Já se ptal na to, jestli někdo nemá zkušenost s tím, že i když taková konstrukce (podle všeho naprosto korektní) funguje v IE6, v Mozille i leckde jinde, tak že nefunguje v IE5."

Tak ted to vubec nechapu co vlastne je cilem akce. V JavaScriptu je UPLNE normalni, ze neco funguje v jednech prohlizecich a v jinych ne, ale je treba se ptat na konkretni problem, myslel jsem, ze jde o pridani noveho option. Leo

[24] Vložil(a): Leo, 2004-08-30, 00:37 Solo | MuteČtenáři: ---

Viz napr.

http://www.quirksmode.org/js/options.html

Tip: Existuje taky Google :-)

Leo

[25] Vložil(a): Leo, 2004-08-30, 00:42 Solo | MuteČtenáři: ---

Nebo

http://www.forum4designers.com/archive22-2004-8-109218.html

Leo

[26] Vložil(a): pixy [web], 2004-08-30, 09:43 Solo | MuteČtenáři: ---

Leo, díky. Ano, to bude nejpíš ono, crossframe bug v IE5 - http://support.microsoft.com/?id=237831 ...

Google jsem samozřejmě použil, hledal v něm asi dvě hodiny a nenašel to pravé. Asi jsem hledal blbě.

[27] Vložil(a): Leo, 2004-08-30, 12:38 Solo | MuteČtenáři: ---

Ja kdyz potrebuju neco narychlo z JavaScriptu tak proste do Googlu natukam primo nazev metody (fce) nebo cast kodu, plus klicove slovo "javascript" (pro jistotu), a browser ("ie", treba) a vetsinou se na prvni, druhe strane dopatram. Pokud ne, teprve az pak oteviram Flanagana a listuju v referencni casti, je obsahla, ale mirne neprehladna, a chyby a vyjimky prohlizecu jsou tak bohate, ze tam nemuze byt vsechno. S JS se clovek rozhodne nenudi, je to dzungle :-) Leo

[28] Vložil(a): dgx [web], 2004-08-30, 14:24 Solo | MuteČtenáři: ---

[14] Podobný ale trošku vychytanější skriptík na zobrazování vygenerovaného HTML popisuji na http://www.dgx.cz/trine/item/rendered-source-aneb-jak-zobrazit-generovany-kod. Je to hodně užitečná pomůcka JavaScriptového programátora.

Přesto bych mnohem víc ocenil pořádný debugger...

[29] Vložil(a): pachollini [web], 2004-08-30, 15:26 Solo | MuteČtenáři: ---

V Opeře je z bezpečnostních důvodů blokováno přidávání / mazání prvků v jiném framu, takže dotyčná funkce by určitě musela být definována přímo ve framu se selektem.

[30] Vložil(a): Milan, 2004-09-01, 07:11 Solo | MuteČtenáři: ---

Pixy: Zkus si na začátku té funkce newItem() vypsat proměnnou alert(sel). Zda už něco neobsahuje. Vypadá to, že už ji máš někde ve stránce definovanou jako prvek formuláře.

[31] Vložil(a): pixy, 2004-09-01, 10:44 Solo | MuteČtenáři: ---

Už jsem psal, že problém byl v té cross-framové chybě (ad [26]). Už je to vyřešeno.

[32] Vložil(a): pixy, 2004-09-01, 10:44 Solo | MuteČtenáři: ---

@@@STOP@@@


Váš názor

Přidat nový komentář

Váš komentář

Přidávání komentářů k tomuto příspěvku již bylo ukončeno.

Chcete-li autorovi přesto sdělit nějakou podstatnou informaci, která se příspěvku týká, kontaktujte jej e-mailem.



 RSS 0.9x  Export  RDF  Export  RSS 0.9x  Komentáře  TXT  Komentáře  XHTML 1.0  Validate  W3C  CSS 2.1  Em-web  Resizable  W4D  90% dogmatic

Vygenerováno: [stránka generována dynamicky]