Autor | Zpráva | ||
---|---|---|---|
Pinqui Profil |
#1 · Zasláno: 13. 7. 2009, 11:53:08
Mám upravený kóz z:
<script language="javascript" type="text/javascript"> var vystup = null; var room = '<?php print $_GET["rid"] ?>'; var id = ''; function repeat(akce,last) { setTimeout("stahniData('"+akce+"','"+last+"')",10000); id = last; } function stahniData(akce, id) { // odmazeme stary skript, pokud existoval vystup = window.read.document.getElementById('msgBox'); var hlavicka = document.getElementsByTagName('head')[0]; var dataLoader = document.getElementById('scriptLoader'); if(dataLoader) hlavicka.removeChild(dataLoader); // vytvorime novy element script var script = document.createElement('script'); script.id = 'scriptLoader'; script.src = 'javascript-rpc.php?akce='+akce+'&room='+room+'&id='+id+'&r='+Math.random(); // POZOR, DULEZITE!! Skript musime vlozit do stranky pomoci DOM - appendChild() // Ihned po vlozeni prohlizec stahne skript a spusti jej var x = document.getElementsByTagName('head')[0]; x.appendChild(script); return false; } function vypisText(txt) { // nejsnazsi cesta, vlozime novy kod ke staremu na konec vystup.innerHTML = txt+vystup.innerHTML; /*alert(vystup.childNodes[0]);*/ while(vystup.childNodes[50]) vystup.removeChild(vystup.childNodes[50]); return false; } function chyba(txt) { // obycejny alert s hlaskou alert(txt); return true; } function vymazData() { // v jednoduchem cyklu smazeme vsechny elementy v prvku vystup while(vystup.hasChildNodes()) vystup.removeChild(vystup.childNodes[0]); return false; } </script> když vypisuji text typu: vypisText('Ahoj toto je pokusný text, který se vypíše') tak to funguje, ovšem problém nastává, když tam napíše někdo smajlíka typu :) jakoby uzavře závorku asi nebo něco takového vypisText('Ahoj toto je pokusný text :) , který se nevypíše') Nevím co s tím mám dělat, aby se ten znak zobrazil, ale neukončil js errorem :-( prosím o radu díky |
||
Chamurappi Profil |
#2 · Zasláno: 13. 7. 2009, 12:59:27
Reaguji na Pinquiho:
Prosím o odkaz na živou ukázku. |
||
Pinqui Profil |
#3 · Zasláno: 13. 7. 2009, 13:14:21
Chamurappi
http://superpokec.cz/try/?rid=55983 |
||
Chamurappi Profil |
#4 · Zasláno: 13. 7. 2009, 13:16:56 · Upravil/a: Chamurappi
Reaguji na Pinquiho:
Když dosazuješ do volání funkce vypisText řetězec, musíš escapovat (minimálně) uvozovky, kterými ho obaluješ (v tomto případě apostrofy). Jinak ti řetězec předčasně skončí, na odkázané stránce končí v textu „dadmtb: <a href='ww“. |
||
Pinqui Profil |
#5 · Zasláno: 13. 7. 2009, 14:56:47
Chamurappi
A jak dosáhnu toho že to projde přez ten dom, ale ukáže se to tak jak má..? Když dám řetězec escapovat a vypíši ho tak se vypíše i s escape ne?? |
||
Chamurappi Profil |
#6 · Zasláno: 13. 7. 2009, 15:10:06 · Upravil/a: Chamurappi
Reaguji na Pinquiho:
„jak dosáhnu toho že to projde přez ten dom“ Moc nechápu, proč pořád zmiňuješ DOM. Máš problém v syntaxi JS, vůbec nesouvisí s DOMem. Chceš-li napsat uvozovky do řetězce ohraničeného uvozovkami, musíš je escapovat zpětným lomítkem — jiná cesta není. V hodnotě toho řetězce pak jsou samozřejmě samotné uvozovky a ne escapované. |
||
_es Profil |
#7 · Zasláno: 13. 7. 2009, 16:00:13
Pinqui
Ten kód je dosť neprehľadný a miesto reťazca je do setTimeout lepšie dať priamo funkciu alebo literál funkcie. |
||
Pinqui Profil |
#8 · Zasláno: 13. 7. 2009, 18:44:41
_es
teď nechápu co jsi myslel s tím setTimeout... vždy na stránce kterou si to nahrává mám volání funkce repeat aby se to obnovovalo pořád po daných intervalech i při přerušení vyvolání té funkce tlačítkem obnovit. |
||
_es Profil |
#9 · Zasláno: 13. 7. 2009, 19:28:38 · Upravil/a: _es
Pinqui
Sú lepšie možnosti, než používaš: setTimeout(názov_funkcie, 10000); // varianta 1 setTimeout(function(p1, p2 /*, ...*/){/* kód funkcie */}, 10000); // varianta 2 |
||
Pinqui Profil |
#10 · Zasláno: 15. 7. 2009, 08:08:12
_es
to jo, ale takto se mi ten setTimeout spustí jednou, a pak ho znovu spustit po 10 vteřinách mám jak ? Proto to mám ve funkci repeat, protože když zavolám funkci ze setTimeout, tak proběhné php kód , který mi dá: <?php repeat "repeat('akce','cislo');"; ?> čímž znovu nastavím, aby se setTimeout spustil po 10 vteřinách a když bych zavolal funkci stahniData(..) ručně přez tlačítko tak při běhu setTimeout mohu resetovat, aby se znovu odpočítávalo 10 vteřin |
||
_es Profil |
#11 · Zasláno: 15. 7. 2009, 08:38:15
Pinqui
Len som ti poradil, že do parametra setTimeout nie je dobré dávať reťazec, ale priamo funkciu s takým istým efektom. S inými záležitosťami sa mi zaoberať nechce. |
||
Pinqui Profil |
#12 · Zasláno: 15. 7. 2009, 11:23:33
_es
Mno však tu 1 variantu tam používám.. |
||
Chamurappi Profil |
#13 · Zasláno: 15. 7. 2009, 11:25:56
Reaguji na Pinquiho:
Nepoužíváš. Dáváš do setTimeoutu řetězec, nikoliv název funkce. |
||
Pinqui Profil |
#14 · Zasláno: 15. 7. 2009, 17:45:10
Když tam dám ovšem jen název funkce bez těch proměnných, tak mi to píše jen chybu a ty proměnné nemohu měnit. takže tu první možnost asi mohu vynechat. zkusím to ještě nějak přepsat na tu druhou, snad se mi to podaří.
|
||
_es Profil |
#15 · Zasláno: 15. 7. 2009, 17:51:42
Pinqui
prvá možnosť znamená napríklad toto: function f(){/* nejaký kód*/} setTimeout(f, 10000); Ak má funkcia f používať nejaké parametre, tak je možné použiť buď globálne premenné, alebo ak je f vnorená, tak premenné a parametre funkcie, v ktorej je f vnorená. |
||
Chamurappi Profil |
#16 · Zasláno: 15. 7. 2009, 17:52:27 · Upravil/a: Chamurappi
Reaguji na Pinquiho:
Tu druhou variantu napsal _es asi trochu jinak než chtěl, měla by být takto: setTimeout(function() { tvojeFunkce(p1, p2 /* ... */); }, 10000); |
||
_es Profil |
#17 · Zasláno: 15. 7. 2009, 17:57:49
Chamurappi
Napísal som to tak, ako som chcel, toto je skôr tretia varianta. Je v nej o jednu funkciu viac, no za to zase môže byť o niečo prehľadnejšia. |
||
Chamurappi Profil |
#18 · Zasláno: 15. 7. 2009, 18:01:09 · Upravil/a: Chamurappi
Reaguji na _es:
„Napísal som to tak, ako som chcel“ Nerozumím, proč uvádíš v té vnořené funkci argumenty, když s nimi nikdy zavolaná nebude. Po deseti sekundách se načasovaná funkce zavolá a p1, p2 /*, ... */ budou vždy undefined, ne? |
||
_es Profil |
#19 · Zasláno: 15. 7. 2009, 18:12:10 · Upravil/a: _es
Chamurappi
Vlastne máš pravdu, no je to použiteľné: Namiesto: function(){var x, y, z; /*ďalší kód*/} function(x, y, z){/*ďalší kód*/} Tá druhá varianta v použiteľnejšom tvare by mohla byť: setTimeout(function(p1, p2 /*, ...*/){/* kód funkcie */}, 10000, hodnota_p1, hodnota_p2, /*, ...*/); |
||
Časová prodleva: 15 let
|
0