Autor | Zpráva | ||
---|---|---|---|
fiona Profil * |
#1 · Zasláno: 28. 9. 2010, 18:11:46
Ahoj , chtěla bych se zeptat:
2. Na stránce mám blok s textem a ten bych chtěla udělat tak aby se mi po 30s změnil na jiný. Textu budu mít asi pět, mám je uložené v databázy a tak bych potřebovala poradit tím náhodným zápisem a změnou. Děkuji |
||
TomasJ Profil |
#2 · Zasláno: 29. 9. 2010, 21:30:00 · Upravil/a: TomasJ
no náhodný zápis umím pouze s Array (přes databázi ne)
takže: <html> <head> <script type="text/javascript"> var vety = new Array("Prvni veta.","Druha veta.","Treti veta.","Ctvrta veta.","Pata veta."); function NahodnaVeta(input) { var rand = Math.floor(Math.random()*input.length); document.getElementById("Veta").innerHTML=input[rand]; setTimeout("NahodnaVeta("+input+")",10000); } </script> </head> <body onload="NahodnaVeta(vety);"> <span id="Veta"></span> </body> </html> Tohle vypíše náhodnou větu do předem určeného ID. Testovací interval je 10 sekund EDIT: Omlouvám se, bohužel script nemění věty. Někde je tam chyba, ale nevím kde. |
||
Witiko Profil |
#3 · Zasláno: 29. 9. 2010, 21:57:15 · Upravil/a: Witiko
To teda sakra je.
setTimeout("NahodnaVeta("+input+")",10000); Kromě toho, že jde o hrozivý zápis (proč jde o hrozivý zápis), tak pole jednoduše nelze napojit na textový řetězec. Jde o objekt, ne o jednoduchý datový typ, jakým je například textový řetězec. Tedy: <html> <head> <script type="text/javascript"> var vety = [<? php kód, který vygeneruje pole ve formátu "Prvni veta.", "Druha veta." ... ?>], element; function NahodnaVeta() { element.innerHTML=input[Math.floor(Math.random()*input.length)]; } window.onload = function() { element = document.getElementById("veta"); NahodnaVeta(); setInterval(NahodnaVeta, 30000); } </script> </head> <body> <span id="veta"></span> </body> </html> |
||
TomasJ Profil |
#4 · Zasláno: 29. 9. 2010, 22:12:58
Reaguji na Witiko:
No nebudu se hádat, nicméně funkce stylu setTimeout("NahodnaVeta("+input+")",10000); používám běžně a vždy fungují, až na tento příklad. |
||
Witiko Profil |
#5 · Zasláno: 29. 9. 2010, 22:27:16 · Upravil/a: Witiko
Ne pokud je input pole, jde o objekt, ne o řetězec. Vzhledem k tomu, že by měl být (ačkoliv bych neřekl, že dle dokumentace MUSÍ) převeditelný do určité míry na prostý text, tak by teoreticky fungovalo toto:
setTimeout("NahodnaVeta(["+input+"])",10000); Jelikož objekt pole po převodu na řetězec navrátí něco takovéhleho: String([1,2,3]) == "1,2,3" Nicméně jak už jsem říkal jde o velmi nehezký zápis, nemluvě o tom, že při každém vytvoření nového intervalu se musí vytvořit zcela zbytečně anonymní nová funkce (která se převede ze zadaného řetězce) a zcela nová instance objektu Array. |
||
TomasJ Profil |
#6 · Zasláno: 29. 9. 2010, 22:30:40 · Upravil/a: TomasJ
Reaguji na Witiko:
Aha děkuji za opravu. Nebo spíš za informaci. |
||
Witiko Profil |
#7 · Zasláno: 29. 9. 2010, 22:34:07 · Upravil/a: Witiko
Jak jsem poupravil s malým přípisem to jde, nicméně stále je mnohem lepší použít takovýto typ zápisu:
setTimeout(function() { NahodnaVeta(input); },10000); Prohlížeč si řetězec stejně musí přežvýkávat zadaný text na funkci, tak proč mu tím přidělávat práci, zvlášť když se dá s definicí funkce dělat mnohem víc. |
||
fiona Profil * |
#8 · Zasláno: 30. 9. 2010, 12:52:51
Tak jsem zkusila tento script[#3] Witiko al ehlasi mi to chybu v osmem radku :
element.innerHTML=input[Math.floor(Math.random()*input.length)]; Jinak do řadku: var vety jsem upravila takto: var vety = <?php echo json_encode($vzkaz)?>; $db=mysql_query("select vzkaz from vety, $link) or die('Error: '.mysql_error ()); while ($zaznam=MySQL_Fetch_Array($db)) $vzkaz[] = htmlspecialchars($zaznam["vety"], ENT_QUOTES); |
||
Witiko Profil |
#9 · Zasláno: 30. 9. 2010, 14:37:51 · Upravil/a: Witiko
Ano, takhle je to správně, nehcal jsem tam omylem část kódu od TomasJ:
element.innerHTML=vety[Math.floor(Math.random()*vety.length)]; |
||
fiona Profil * |
#10 · Zasláno: 30. 9. 2010, 14:58:29
Tak takto mam celý svůj kód a ted mi to hlasí chybu že element má hodnotu null nebo není objekt:
<?php include "config.php";?> <?php $db=mysql_query("select text from title", $link) or die('Error: '.mysql_error ()); while ($zaznam=MySQL_Fetch_Array($db)) $vzkaz[] = htmlspecialchars($zaznam["text"], ENT_QUOTES); ?> <html> <head> <script type="text/javascript"> var vety = [<?php echo json_encode($vzkaz)?>], element; function NahodnaVeta() { element.innerHTML=vety[Math.floor(Math.random()*vety.length)]; } window.onload = function() { element = document.getElementById("veta"); NahodnaVeta(); setInterval(NahodnaVeta, 30000); } </script> </head> <body onload="NahodnaVeta(vety);"> <span id="veta"></span> </body> </html> |
||
radvis Profil |
#11 · Zasláno: 30. 9. 2010, 15:57:28 · Upravil/a: radvis
Sry, blbě přčtena věta
|
||
fiona Profil * |
#12 · Zasláno: 30. 9. 2010, 16:01:32
To mi normálně vypíše ty data v poli, ale ta chyba v tom scriptu tam je pořád
|
||
Witiko Profil |
#13 · Zasláno: 30. 9. 2010, 17:44:58
Překlad do toho jsonu tam už přidá i ty závorky, však?
Takže: var vety = <?php echo json_encode($vzkaz)?>, |
||
fiona Profil * |
#14 · Zasláno: 30. 9. 2010, 18:08:02
Ne ne pořád to samé
|
||
Uknown Profil * |
#15 · Zasláno: 30. 9. 2010, 21:24:21
A proč máš "NahodneVety(vety) v onloadu když to stejně v té funkci tu "proměnnou" nemáš a jak je SetInterval, nemá tam být "setInterval("NahodnaVeta()", 30000);" ?
|
||
_es Profil |
#16 · Zasláno: 30. 9. 2010, 22:36:29 · Upravil/a: _es
fiona:
z <body> zmaž atribút onload . Ten sa "bije" s tým onload om v skripte.
|
||
Witiko Profil |
#17 · Zasláno: 1. 10. 2010, 17:37:21 · Upravil/a: Witiko
Bzi, já ho zapomněl odmazat. -_-
fiona: Pokud to stejně nepůjde, tak poprosím o živou ukázku. Nehodlám už si pronajímat kříšťálovou kouli. |
||
Časová prodleva: 14 let
|
0