• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie z tablicy

Object Storage Arubacloud
0 głosów
1,187 wizyt
pytanie zadane 17 marca 2017 w JavaScript przez bugs55 Obywatel (1,090 p.)
edycja 17 marca 2017 przez bugs55

Cześć.
Mam bloga książkowego. Wpadłem na pomysł aby napisać stronę internetową na której będzie można wpisać dowolną ilość tytułów książek, a potem z tych książek zostanie wylosowana jedna. Kod mam prawie gotowy, niestety losowanie nie przebiega pomyślnie. 
Pomożecie? :P

Z góry dzięki,
Konrad


<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>What's next?</title>
</head>
<body>
	<div id="to"></div>
	<button id="klik">Klik</button>
	<div id="wygrana"></div>
</body>
</html>

<script type="text/javascript">
	
	var ile = parseInt(prompt("Ile książek?"));

	for(var i=1; i<=ile; i++)
	{
		document.getElementById("to").innerHTML += "<input type=text class=ks><br>";
	}

	function rob(){
		var pula = document.querySelectorAll('.ks').value;
		var w = Math.floor((Math.random() * (ile-1)) + 0);

		document.getElementById("wygrana").innerHTML = pula[w];
	}

	var x = document.getElementById("klik").addEventListener("click",rob);
</script>

3 odpowiedzi

0 głosów
odpowiedź 17 marca 2017 przez Fenix Nałogowiec (26,750 p.)
Masz taki błąd że querySelectorAll nie może pobrać value. Ponieważ jest to tablica wartości, musisz odwołać sie pojedynczo do obiektów.
komentarz 17 marca 2017 przez bugs55 Obywatel (1,090 p.)
A gdybym zmienił na getElementsByClassName?
komentarz 17 marca 2017 przez Fenix Nałogowiec (26,750 p.)
"Elements" <- jak myślisz, zwróci pojedyńczy obiekt czy tablice?
0 głosów
odpowiedź 17 marca 2017 przez obl Maniak (51,280 p.)

Najpierw robisz to:

var pula = document.querySelectorAll('.ks').value;

a później robisz to:

    document.getElementById("wygrana").innerHTML = pula[w];

to nie ma prawa zadziałać. No i jeszcze to:

var w = Math.floor((Math.random() * (ile-1)) + 0);

Po co ci to + 0? Koniec końców chyba ci chodziło o zrobienie czegoś takiego jak tutaj.

0 głosów
odpowiedź 17 marca 2017 przez Arkadiusz Fus Obywatel (1,100 p.)

O to Ci chodziło ? 

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>What's next?</title>
</head>
<body>
    <div id="to"></div>
    <button id="klik">Klik</button>
    <div id="wygrana"></div>
</body>
</html>
 
<script type="text/javascript">
     
    var ile = parseInt(prompt("Ile książek?"), 10);
 
    for(var i=1; i<=ile; i++)
    {
        document.getElementById("to").innerHTML += "<input type=text class=ks><br>";
    }
 
    function rob(){
        var pula = document.querySelectorAll('.ks');
        var w = Math.floor((Math.random() * ile));
 
        document.getElementById("wygrana").innerHTML = pula[w].value;
    }
 
    var x = document.getElementById("klik").addEventListener("click",rob);
</script>

 

var ile = parseInt(prompt("Ile książek?"), 10);

Zawsze dodawaj do parseInt(numer, 10) tą 10. Dlaczego ? wtedy parser wie że chodzi Ci o liczby w systemie dziesiętnym, a nie innym. Dobry nawyk.

document.querySelectorAll('.ks')

Tutaj najpierw pobierz wszystkie dostępne pola z klasą ks. Tyle starczy.

var w = Math.floor(Math.random() * ile);

Tutaj losujesz do ilu ma być liczba losowana. +0 jest tutaj zbędne. 

document.getElementById("wygrana").innerHTML = pula[w].value;

A tutaj znajdź w wyszukanej puli miejsce "w" i przypisz do wygranej jej wartość.

Myślę że już wiesz jak to powinno działać :)

Podobne pytania

0 głosów
2 odpowiedzi 207 wizyt
0 głosów
2 odpowiedzi 382 wizyt
pytanie zadane 21 marca 2017 w C i C++ przez seba Dyskutant (8,900 p.)
0 głosów
2 odpowiedzi 463 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...