Autor | Zpráva | ||
---|---|---|---|
qwqwqw Profil * |
#1 · Zasláno: 29. 7. 2020, 22:45:29
Zdravím, jen tak si experimentuji z JS a zajímá mně jestli mohu vytvořit pole (Array) z prvků -názvů jednoduchých funkcí (např. změna barvy, velikosti písma...). A potom jak ty náhodně zamíchané prvky pole - funkce přiřadit do klikacích nadpisů.
Díky za pomoc a rady.Nejsem odborník, jen si o prázdninách trošku hraju s JS. var a; a = new Array ( "funkcea()", "funkceb()", "funkcec()" ) for(i=a.length;i--;) a.push(a.splice(Math.floor(Math.random() * (i+1)),1)[0]); document.getElementById("jedna").onclick="a[0]"; document.getElementById("dva").onclick="a[1]"; document.getElementById("tri").onclick="a[2]"; |
||
Kajman Profil |
#2 · Zasláno: 30. 7. 2020, 07:05:45
Při nastavení onclicku nedávejte kolem pole uvozovky, aby se tam dal string z toho pole.
|
||
Radek9 Profil |
qwqwqw:
Děláš to zbytečně složitě celé. Pár tipů: 1) Funkce nikdy (vážně nikdy) nedávej do řetězce. Můžeš mít úplně v pohodě pole funkcí. Taky se preferuje zápis pomocí hranatých závorek (místo new Array ):
var a = [funkcea, funkceb, funkcec] var a = [ function () { // akce A }, function () { // akce B }, function () { // akce C }, ] 2) Ačkoli ten tvůj zápis pole opravdu zamíchá, není to z toho úplně zřejmé. Taky to není úplně efektivní (neustále zmenšuješ a zvětšuješ velikost pole). Pokud máš malé pole, přijde mi čistší (ačkoli to stále není úplně efektivní, ale to je problém spíš u větších polí) použít sort :
a.sort(function () { return Math.random() - 0.5 // Funkce Math.random vrací číslo od 0 do 1. // Odečteme 0.5, aby byl výsledek se stejnou pravděpodobností kladný, nebo záporný. // To zapříčiní, že se všechny prvky náhodně poprohazují. }) function knuthfisheryates(arr) { for (var i = 0; i < arr.length; ++i) { var j = Math.trunc(Math.random() * (i + 1)) var tmp = arr[i] arr[i] = arr[j] arr[j] = tmp } return arr } knuthfisheryates(a) 3) Jak už psal Kajman, ty do onclicku nechceš přiřadit řetězec "a[x]" , ale přímo prvek z toho pole. Takže takhle:
document.getElementById('jedna') = a[0] document.getElementById('dva') = a[1] document.getElementById('tri') = a[2] var b = [ document.getElementById('jedna'), document.getElementById('dva'), document.getElementById('tri'), ] for (var i = 0; i < a.length; ++i) { b[i].onclick = a[i] } nejakatrida ) a vybereš je rovnou jako kolekci:
var b = document.querySelectorAll('.nejakatrida') for (var i = 0; i < a.length; ++i) { b[i].onclick = a[i] } |
||
Kajman Profil |
#4 · Zasláno: 30. 7. 2020, 13:06:48
Raději ověřit i počet elementů.
var b = document.querySelectorAll('.nejakatrida') for (var i = 0; i < a.length && i < b.length; ++i) { b[i].onclick = a[i] } |
||
Časová prodleva: 4 roky
|
0