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

Když diskuse,
tak s Lopuchem

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: pbqzgxf
[ 398 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
wronski Wronski Jsou to zrůdy. - Sofistikované. 23.5.2011 17: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 16: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 12: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 12: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.
david11 David11 - Bilbo..and the mouse police never sleeps 23.5.2011 12:24  611
mptsDiky, do konzole jsem nahlédnout zkusil, nic co by mě navedlo k řešení toho problému jsem tam ale neobjevil.

Resp. objevuje se tam tohle, ale netuším jestli to s tím problémem vůbec souvisí:

Could not read chrome manifest file 'C:\Program Files\Mozilla Firefox\extensions\{972ce4c6-7e08-4474-a285-3208198ce6fd}\chrome.manifest'.

Chyba: Components.classes['@mozilla.org/extensions/manager;1'] is undefined
Zdrojový soubor: chrome://dotnetassistant/content/bootstrap.js
Řádek: 33

Varování: XUL box prvku _moz_generated_content_after obsahuje vloženého potomka #text, čímž musí být všichni jeho potomci zalomeni do bloku.
Zdrojový soubor: chrome://browser/content/browser.xul
Řádek: 0

Muzes mi prosim poradit jak tu konzolu pouzit? Da se pomoci ni nejak krokovat?
david11 David11 - Bilbo..and the mouse police never sleeps 23.5.2011 12:19  610
huhSamozřejmě, že něco nevykresluji, abych to pak zahodil tím, že zavolám reload().
Jen jsem náhodou přišel na to, že IE mi tam to menu VRÁTÍ po tom zavolání reload(). Resp. chová se to v tom IE, podle mě takto:
- v BODY zavolám funkci zobraz(false), která vykreslí nejdřív bitmapu a pak menu.
- při události onresize zavolám funkci zobraz(true), která vykreslí bitmapu v jiné velikosti a místo znovuvykreslení menu zavolá reload(), což (v IE) způsobí, že se tam to menu opět objeví. Dělám to tak proto, protože pokud bych při onresize zavolal jak překreslení bitmapy, tak překreslení menu, nezafungovalo by to (jak v IE, tak ve FF). Pokud ve FF reloaduju ručně (kliknutím na tlačítko reload) - udělá to přesně to samé, jako v IE, tzn to menu se tam znovuobjeví. Jediný rozdíl mezi IE a FF v tomto případě je ten, že ve FF se to reload() nedá zavolat v ten okamžik kdy potřebuju z javascriptu, v IE ano.
mpts mpts Je to jinak, ba přesně naopak! 21.5.2011 09:01  609
David11 [607]: Já snad i chápu, co chceš udělat, i když ne tak úplně, proč to chceš udělat (přijde mi, že se drbeš levou rukou za pravým uchem), no ale především: všiml sis, že FF má i v základní instalaci chybovou konzoli, a že proň existují velmi užitečná rozšíření na ladění javascriptu? Možná by stačilo do té konzole jen nahlédnout a hned bys viděl, v čem je problém.
huh huh 20.5.2011 19:57  608
To naštěstí nechápu. Ty něco vykreslíš a pak to hned zahodíš tím, že zavoláš reload() ?
david11 David11 - Bilbo..and the mouse police never sleeps 20.5.2011 17:40  607
Jasně, tohle fungovat bude. Ja to používám složitějc a zřejmě jsem udělal něco, co IE (možná náhodou) udělá přesně tak, jak potřebuju a FF ne.

<BODY onresize="zobraz(true)">
<script>
zobraz(false);
</script>
</BODY>

Podle parametru true/false poznam, zda je to volano pri onresize nebo normalne pri zobrazovani stranky. Tohle reseni je "z nouze ctnost", ktera prave v tom IE zafungovala, a ted jsem zjistil, ze to nefunguje ve FF.

V ty funkci zobraz totiz mam jednak vykresleni bitmapy v zavislosti na velikosti okna a jednak vykresleni prvku menu, ktere mam ukotvene v levem hornim rohu. Pokud to volam s tim false, vykresluji jak bitmapu, tak menu. Potrebuji ale zareagovat zmenou velikosti bitmapy pokud uzivatel zmeni velikost okna. Tak jsem to navazal na tu udalost onresize, zmena velikosti bitmapy je OK, ale kdyz (jak v IE, tak v FF) po vykresleni bitmapy jeste zavolam vykresleni tech tlacitek, tak bitmapa zmizi a tlacitka se vykresli blbe. A prisel jsem na to, ze staci vykreslit pri te udalosti onresize pouze bitmapu a tlacitka se v okne objevi kdyz zadam rucne reload. Tak jsem to udelal tak, ze v pripade onresize vykreslim pouze bitmapu a javascriptem zavolam to reload. V IE to zafunguje, v FF ne (jako bych to reload nezavolal).

Mozna to vysvetluju blbe, ale snad to z toho jde pochopit ; - )
huh huh 20.5.2011 17:22  606
David11 [605]: Me tento minimalni priklad funguje OK i ve FF.
<script>
function f() {
document.getElementById('x').innerHTML = document.body.clientWidth
}
</script>
<body onresize="f()">
<div id='x'>xxxx</div>
54564564
</body>

Jinak, než se patlat s nekompatibilitama jednotlivejch prohlížečů, bych použil nějakou zavedenou knihovnu.
david11 David11 - Bilbo..and the mouse police never sleeps 20.5.2011 15:46  605
Můžete mi někdo prosím poradit, jak mám správně volat funkci javascriptu při události onresize? Potřebuji, aby se při změně velikosti okna on-line překreslil obsah stranky. Dělám to takto:
<BODY onresize="mojeFunkceJavascriptu()">
...
</BODY>
V IE vše funguje OK. Ve FireFoxu nezafunguje zavolání javascriptové funkce reload (neprovede se), přestože to na ten řádek evidentně jde. Když vynutím reloadování stránky ručně, vypadá pak přesně tak, jak chci. V IE to reloadování pomocí javascriptu zafunguje OK (nemusí se to pak ručně reloadovat), ve FireFoxu ne (musí se to pak ručně reloadovat). Úplně by mi stačilo, kdyby to, když to takto volám, zafungovalo i ve FireFoxu. Nebo jak jinak mám zavolat tu svou funkci (obsahující ten reload) při události onresize, pokud chci, aby reload při tom volání zafungoval i ve FireFoxu?
bighead BIGHead Pořádáte akci, vyzkoušejte - naše moderátory 19.2.2011 11:46  602
Teď koukám, že je to klub JS, takže ta část o tom zápisu asi neplatí, ale ten začátek by měl :).
bighead BIGHead Pořádáte akci, vyzkoušejte - naše moderátory 19.2.2011 11:41  601
Já bych je umístil všechny do jednoho Divu, který bych napozicoval, aby zůstaval pořád vidět a do ně bych narval ty řetězce už třeba jen s class="retezec" a pak bych přes margin nastavil tu tvoji vzdálenost, co cheš aby byly od sebe. Čím míň absolutně/relativně/jakkoliv pozicovanejch prvků, tím líp.

Navíc ten tvůj zápis, kdy každou vlasnost děláš zvlášť je taky masakr, stačí přeci zapsat:

#IDECKO1 {
position: "absolute";
top: 0px;
left: 12px;
background-color="white";
font-family: Arial; font-size: 10px;
}
david11 David11 - Bilbo..and the mouse police never sleeps 18.2.2011 20:07  600
Můžete mi prosím někdo poradit, zda se dá nějakým způsobem zadat relativně vzdálenost jednoho fixovaného řetězce od druhého? Jde mi o to, že potřebuji na stránku napsat řetězec, který při scrolování bude zůstávat stále na stejném místě; a vedle něj druhý řetězec, který také bude zůstávat na stejném místě - a rád bych nějak pevně zadal vzdálenost začátku druhého textu od konce prvního. Dá se to nějak udělat?

Zatím to řeším tak, že zadám vzdálenost obou textů absolutně od levého horního rohu dokumentu, což se mi ale nelíbí, protože nevím, zda se mohu spolehnout, že všechny prohlížeče zobrazí ty texty (jejich délku) stejně jako se zobrazují mně.

Dělám to takhle:

(style)
#IDECKO1 {position: "absolute";}
#IDECKO1 {top: 0px; left: 12px}
#IDECKO1 {background-color="white"}
#IDECKO1 {font-family: Arial; font-size: 10px}
(/style)
(style)
#IDECKO2 {position: "absolute";}
#IDECKO2 {top: 0px; left: 85px}
#IDECKO2 {background-color="white"}
#IDECKO2 {font-family: Arial; font-size: 10px}
(/style)
function fixedEl(id1, id2)
{
if(document.all)
{ document.all[id1].style.pixelTop = document.body.scrollTop + 0;
document.all[id1].style.pixelLeft = document.body.scrollLeft + 12;
document.all[id2].style.pixelTop = document.body.scrollTop + 0;
document.all[id2].style.pixelLeft = document.body.scrollLeft + 85;
}
}
// a pak někde na stránce:
document.write("(span id='IDECKO1') REREZEC_1 (/span)");
document.write("(span id='IDECKO2') REREZEC_2 (/span)");
// (v tagu místo špičatých závorek zde píšu kulaté, nevím jak zařídit, aby se v příspěvku zobrazil tag s špičatými závorkami)

ale rád bych ten druhý text zadal nějak relativně od toho prvního.

A druhý dotaz: nedělám to zbytečně složitě, když pro každý fixovaný řetězec vytvářím nové idečko? Mým záměrem je někde absolutně zafixovat první řetězec a za ním v pevně daných vzdálenostech několik dalších řetězců. Opravdu musí mít každý řetězec své idečko, nebo to dělám blbě?

Jo a ještě vysvětlení, proč to celé nevypíšu jedním řetězcem: jednak chci, aby vzdálenost řetězců od sebe byla větší než jedna mezera a pak také chci, aby každý řetězec měl bílé pozadí, ale mezi nimi aby bylo pozadí stránky.
bredy 20.9.2010 21:19  599
Nevím, proč tam máš jednou backgroundColor a podruhé color. A jinak se ta funkce dá navěsit na ten input snad jako onchange nebo tak nějak.

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

(c) 2001-2011 Lopuch.cz   
Kontakt