Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Lopuch, server nejen
pro botaniky

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub JavaScript [ŽP: neomezená] (kategorie Programování) moderuje Šéf Lopuchu.
Archiv
- http://al3x.3web.cz/js/ - najdete zde zaklady javascriptu je tam i docela dobre vysvetleny cookies
- specifikace ECMAScriptu - standard založený na JavaScriptu a JScriptu.
Download Opera
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: jrzlvxk
[ 398 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
david11 David11 - Bilbo..and the mouse police never sleeps 24.5.2011 17:03  627
Jo, máš pravdu, že "kvůli lidem jako jsem já" ; - ) - já jsem to totiž opral ze stránek Jak psát web. Kdyby to tam bylo vyřešeno líp, opral bych to líp : - )
Nicméně teď mi došlo, proč v tom kódu, který jsem opral, je to if(document.all). Jestli to dobře chápu, je to to samé jako bych tam napsal if (navigator.appName == "Microsoft Internet Explorer").
Aha. Tak jsem ještě před odesláním toho příspěvku trochu zapátral na Jak psát web a zjistil jsem, že tam autor dokonce doporučuje "v praxi" používat to if (document.all) místo toho if (navigator.appName == "Microsoft Internet Explorer") (viz http://www.jakpsatweb.cz/javascript/objekt-window.html#navigator). Co si o tom myslíš? On tam i píše, že ten document.all zná i Opera, ale Opera, jak jsem vyzkoušel, nepotřebuje k tomu fixování pouštět tu funkci testFix (resp. fixujTlacitka), tak se mi jeví jako (minimálně v tomto případě) lepší použít to if (navigator.appName == "Microsoft Internet Explorer"), protože jediný, kdo ji vyžaduje pustit, aby to zafungovalo, je IE. Máte s tímhle někdo zkušenost, nebo to vidíte tak, že "slušný programátor se do nějakých takovýchhle konstrukcí vůbec nepouští"? ; - )
huh huh 24.5.2011 15:27  626
Oni naštěstí ostatní prohlížeče kvůli lidem jako ty :-) interpretují
if (document.all)
jako false (tzv. neviditelný/nedetekovatelný document.all), takže se ten mimo IE nevykoná.
david11 David11 - Bilbo..and the mouse police never sleeps 24.5.2011 15:13  625
huhDíky, až teď mi po té Tvé poslední odpovědi došlo, že to tam skutečně mám jen kvůli IE. Resp. když obsah té funkce testFix (fixujTlacitka) z toho kódu celý vyhodím, přestane to fungovat jen v IE (tlačítka přestanou být fixována), v ostatních prohlížečích ale fungují i nadále. To mě docela dostalo. Možná že už začínám chápat proč máte IE za "nestandardní" prohlížeč : - )

Ostatní prohlížeče se s tím kódem, když ho tam nechám, vyrovnají, fungují i s ním. Můžeš mi prosím ještě poradit jestli bude čistší, když tam ten kód pomocí ifu nechám jen pro IE a pro ostatní prohlížeče se nebude volat? Je skutečně pro ostatní prohlížeče irelevantní resp. potencionálně by mohl být i škodlivý? Díky.
huh huh 24.5.2011 14:08  624
Takhle, pokud ta část s document.all je jenom určená pro IE, tak OK, ale obecně jde o proprietární zastaralé řešení, které se dá snadno nahradit standardním getElementById.
david11 David11 - Bilbo..and the mouse police never sleeps 24.5.2011 13:13  623
huh [618]Díky, s tím DIVem a bez toho reload() už to funguje přesne tak, jak jsem chtěl. Teda musel jsem do toho Tvého kódu vrátit tu fci testFix(id). Což mě, jako naprostého amatéra v programování webu, vede k otázce proč jsi napsal "document.all nekomentuji". Pokud je to ale všem zde natolik zřejmé, že bys "nošením dříví do lesa" všechny votravoval, můžeš mi to kdyžtak nějak trochu rozvést do pošty? Anebo sem, podle Tvého uvážení, třeba by to někoho taky zajímalo. ; - )
(Já to tam vrazil proto, že jsem si na stránkach Jak psát web našel příklad jak zafixovat objekt na stránce a vopral jsem to přesně podle toho příkladu.)

Každopádně ještě jednou díky, to vyražení id="PREPOCTI" z <BODY ... > a vražení pomocí DIV mezi <BODY> ... </BODY> bylo přesně to, co jsem potřeboval poradit.
Jasně, ten můj kód je asi hodně nestandardní resp. ošklivý, což může asi vést k problémům s nekompatibilitou v budoucích prohlížečích (?), ale zatím to funguje OK, tak to zatím předělávat nebudu : - ) Měl jsem ale za to, že to je naopak elegantní, vyřešit všechno jednou jednoduchou a jednou složitou funkcí javascriptu, ale jak jsem psal, v programování webu nemám abici být profesionál ; - )
wronski Wronski Jsou to zrůdy. - Sofistikované. 23.5.2011 22:20  622
Když bych to neznačkoval jako inline, a dal k tomu css, tak si vyřešim nežádoucí značkování v komentářích a uvozovkách, ale zas to pak bude nepřenosný... Takže asi zůstane u lehký primitivní verze.
wronski Wronski Jsou to zrůdy. - Sofistikované. 23.5.2011 21:32  621
huh [620]: Dík. Anka taky řikala, že je hezkej .))
huh huh 23.5.2011 21:09  620
Wronski [619]: Ten C++ zvýrazňovač ale trpí přesně stejnými problémy. Jinak PHP zvýrazňovač hezkej.
wronski Wronski Jsou to zrůdy. - Sofistikované. 23.5.2011 21:04  619
huh [617]: Dík, jdu to projít.

Mně se líbil ten tvůj zvýrazňovač na C++. Když jsem se ptal v lopuších scriptech, jestli není něco na php, tak nikdo nereagoval, takže jsem se toho včera chopil... (Zatím to mám takhle.) Problém je, že neumim javascript :)
huh huh 23.5.2011 21:03  618
David11 [614]: Treba tohle mi funguje jak v FF tak IE:
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<TITLE></TITLE>
<script >

function testZobraz(jeResize)
{                                                                                                           
document.getElementById('PREPOCTI').innerHTML = "<a href='javascript:history.back()'> <img src=test.jpg width='200%' alt='zpět' border='0'> </a>";
if (!jeResize) document.write("<nobr><div id='ID_FIXUJ'> TESTOVACI_RETEZEC </div></nobr>");                   
}

</script>
<style>
#ID_FIXUJ {position: 'absolute';}
#ID_FIXUJ {top: 0px; left: 12px}
#ID_FIXUJ {font-family: Arial; font-size: 10px}
</style>
</HEAD>
<BODY
onresize="testZobraz(true)">
<div
id="PREPOCTI"><br>
</div>
<script>
testZobraz(false);
</script>
</BODY>
</HTML>
Ale prijde mi to osklivy, spousta toho javaskriptu je IMHO naprosto zbytecna (ted mam hlavne na mysli tu skutecnou galerii), ty tlacitka (odkazy) je naprosto zbytecny generovat javaskriptem, document.all nekomentuji :-), vsechno to document.write vyhazet. Napis toho maximum v HTML a v JS se pak jen napoj na udalosti, ktere chces obslouzit.
huh huh 23.5.2011 20:16  617
Wronski [615]: Hehe, tady se nekdo snazi napsat zvyraznovac syntaxe pomoci regularnich vyrazu :-) Oni se na to ale moc nehodi, pokud chces osetrovat takovehle detaily. Pripadne pouzij tohle.
wronski Wronski Jsou to zrůdy. - Sofistikované. 23.5.2011 18:00  615
Snažím se udělat filtr (nevím, jak se tomu správně říká) na nějaké výrazy (něco jako s = s.replace(/\&/g, '&amp;');)

Příklad:
filtr 1: obsah v uvozovkách = <i>obsah v uvozovkách</i>
filtr 2: nějaké_slovo = <b>nějaké_slovo</b>

Jak mám zapsat "pokud je nějaké_slovo v uvozovkách, neproveď filtr 2"? Resp. to asi bude "pokud neodpovídá filtru 1, proveď filtr 2". Ale poradí mi někdo, jaký bude konkrétní zápis?
david11 David11 - Bilbo..and the mouse police never sleeps 23.5.2011 17:20  614
Tady je kód, který se chová tím dříve popsaným způsobem.
Je to tam napsané pro IE (position:'absolute')

<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<TITLE></TITLE>
<script src="../../funkce.js"></script>
<style>
#ID_FIXUJ {position: 'absolute';}
#ID_FIXUJ {top: 0px; left: 12px}
#ID_FIXUJ {font-family: Arial; font-size: 10px}
</style>
</HEAD>
<BODY
onscroll="testFix('ID_FIXUJ')"
onresize="testZobraz(true)"
id="PREPOCTI">
<script>
testZobraz(false);
</script>
</BODY>
</HTML>

function testFix(id)
{
if(document.all)
{ document.all[id].style.pixelTop = document.body.scrollTop + 0
document.all[id].style.pixelLeft = document.body.scrollLeft + 12;
}
}

function testZobraz(jeResize)
{
document.getElementById('PREPOCTI').innerHTML = "<a href='javascript:history.back()'> <img src=test.jpg width='200%' alt='zpět' border='0'> </a>";
if (jeResize)
{ //javascript:location.reload(false);
}
else
{ document.write("<nobr><div id='ID_FIXUJ'> TESTOVACI_RETEZEC </div></nobr>");
}
}

Když je tam zaremovaný ten řádek
javascript:location.reload(false);
je třeba vyvolat reload stisknutím tlačítka Reload v prohlížeči - pak se teprve zobrazí TESTOVACI_RETEZEC. Když uživatel změní velikost okna, TESTOVACI_RETEZEC zmizí, objeví se ale po stisku tlačítka Reload.

Pokud ten řádek
javascript:location.reload(false);
odremujete, TESTOVACI_RETEZEC se objevuje automaticky (přesně tak jak potřebuji). Ovšem jen v IE.

Pokud
#ID_FIXUJ {position: 'absolute';}
zaměníte za
#ID_FIXUJ {position: fixed;}
a zkusíte to samé ve FF, TESTOVACI_RETEZEC se při odremovaném reload() neobjevuje (to je ten prvotní problém, který mě ve FF vadí), musí se vždy reloadovat ručně.

Když se parametr jeResize vždy nastaví na false, vůbec se tam neobjeví bitmapa a TESTOVACI_RETEZEC ani nemá nastaven font Arial.
(Kvůli tomu jsem tam dával ten parametr jeResize a v IE s ním vše funguje OK, ve FF to ale ten reload() nezavolá.)

Můžete mi prosím poradit co dělám špatně?
Díky.
david11 David11 - Bilbo..and the mouse police never sleeps 23.5.2011 13:42  613
huhAno, reloadem je myšlen location.reload() a nejde o framy.
Nevím proč se to tak chová, ale fakt si nevymýšlím : - )

Asi bych měl primárně přijít na to, proč to (jak v IE, tak ve FF) při onresize při pokusu o vykreslení bitmapy a následném vykreslení menu, havaruje - tam asi bude zakopaný pes, to reload() je pak už jen "ochcaní" nějaké té původní chyby, které v IE náhodou zafunguje.
Tím vykreslením bitmapy mám na mysli podobný kód, jaký jsi napsal v [606]:
document.getElementById('x').innerHTML = document.body.clientWidth
a tím vykreslením menu mám na mysli vykreslení odkazu ukotveného napevno v levém horním rohu, v adrese odkazu mám pak buď html adresu nebo příkaz javascriptu.
huh huh 23.5.2011 13:37  612
David11 [610]: je možný, že si jenom stojím na vedení, na JS se expertem býti necítím, ale tyhle dvě věci jsou podle mě v naprostém rozporu:

Samozřejmě, že něco nevykresluji, abych to pak zahodil tím, že zavolám reload().
...
při události onresize zavolám funkci zobraz(true), která vykreslí bitmapu v jiné velikosti a místo znovuvykreslení menu zavolá reload()


Předpokládám, že reloadem je myšlen location.reload() a že nejde o (i)framy.

[ 398 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt