| 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: 6 let
|
|||
0