Olen tekemässä javascript koodia, joka "random"-napista arpoo numeron, "Seuraava"-napista muuttaa numeron yhden isommaksi ja "Edellinen"-napista yhden pienemmäksi.
Vain random-nappi toimii :(
Miksi?
Koodi:
function random(type) { if (type==1) { var number1=Math.floor(Math.random()*3); } if (type==2) { var number1=number1+1; } if (type==3) { var number1=number1-1; } var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("contentdiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","tieto/" + number1 + ".php",true); xmlhttp.send(); }
<button onclick="random(3)">Edellinen</button> <button onclick="random(1)">Random</button> <button onclick="random(2)">Seuraava</button>
esittele tuo number1 muuttuja muualla.
var number1 = 0; function random(type) { if (type==1) { number1=Math.floor(Math.random()*3); } if (type==2) { number1=number1+1; } if (type==3) { number1=number1-1; } .....
Ei toimi vieläkään
mistä valittaa?
muista myös alustaa tuo number (var number1 = 0;)
Siis "Edellinen"- ja "Seuraava"-napeista ei tapahdu mitään.
Lisäys:
Aa, nyt toimii, kun tein näin
number1=number1+1;
enkä näin:
var number1=number1+1;
--
En huomannut sinun ensimmäisestä kommentista tuota muutosta :D.
Kiitos ja anteeksi huolimattomuudesta!
Mod. huom: koodeista voi laittaa myös pelkät olennaiset osat.
JuustoPala kirjoitti:
Siis "Edellinen"- ja "Seuraava"-napeista ei tapahdu mitään.
Sinulta kysyttiin, että mikä se virheilmoitus on, mikä tulee muita nappeja painelemalla.
Eihän se varmasti valita mitään; ”var x = x + 1” vain tuottaa arvon NaN.
Pakostihan se jotain valittaa, jos skriptin suoritus keskeytyy virheen takia.
The Alchemist kirjoitti:
Pakostihan se jotain valittaa, jos skriptin suoritus keskeytyy virheen takia.
Ei ”se”, siis ilmeisesti selain, yleensä anna mitään käyttäjälle näkyvää ilmoitusta, jos skriptissä sattuu virhe. Virheilmoitus tulostuu kyllä lokiin, ja ohjelmistokehittäjän pitäisi tietysti osata katsoa sieltä. Eikä var x = x + 1 aiheuta virhettä, vaikka se toki asiallisesti ottaen on päin mäntyä; siitä vain tulee x:n arvoksi NaN (”epäluku”), kuten Metabolix huomautti.
The Alchemist kirjoitti:
Pakostihan se jotain valittaa, jos skriptin suoritus keskeytyy virheen takia.
Kuka on sanonut, että suoritus keskeytyisi virheen takia? On sanottu vain, että napeista ei tapahdu mitään. Koodi yrittää ladata XHR:llä sivun tieto/NaN.php, ja jos sitä ei ole, ei tapahdu mitään, koska mitään virheenkäsittelyä ei ole. Epäonnistuneen latauksen voisi tietysti huomata verkkokonsolin puolelta, mutta JS:n kannalta mitään virhettä ei silti tapahdu.
<button id="edellinen">Edellinen</button> <button id="satunnainen">Satunnainen</button> <button id="seuraava">Seuraava</button>
// Tehdään oma klosuuri, ettei kyllästetä window-objektia kaikella turhalla. (function() { // Nämä on saatavilla tämän klosuurin sisällä. var sivuNro = 1, content = document.getElementById('contentdiv'), xmlhttp; // Onko tarpeeksi moderni selain? Löytyikö elementtiä? Jos ei niin antaa olla! if (!window.XMLHttpRequest || !content) return; // Alustetaan tämä nyt vain kerran. xmlhttp = new XMLHttpRequest(); // Se pätkä, jolla ladataan tavaraa. var lataaTieto = function lataaTieto(id) { // Hipsut on vakiintuneempi tapa merkitä merkkijonoja JavaScriptissä kuin lainausmerkit. xmlhttp.open('GET', 'tieto/' + id + '.php', true); xmlhttp.send(); }; // Mehän käytetään joka kerta tätä samaa funktiota, niin ei tehdä sitä aina turhaan uudelleen. xmlhttp.onreadystatechange = function xmlHttpReadyStateChange() { // Aina mieluummin === kuin ==. if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { content.innerHTML = xmlhttp.responseText; } }; // Sitten heivataan noita nappuloita käyttöön. Tää on DOM Level 1 -tyyliä, mutta good enough nyt. document.getElementById('edellinen').onclick = function edellinenClick() { // Pienennetään sivunumeroa. sivuNro--; // Varmistetaan ettei se mene liian pieneksi. if(sivuNro < 1) sivuNro = 1; // Tehdään latauspyyntö. lataaTieto(sivuNro); }; // Sitten sama toisin päin. document.getElementById('seuraava').onclick = function seuraavaClick() { // Kasvatetaan sivunumeroa. sivuNro++; // Varmistetaan ettei se mene liian isoksi. if(sivuNro > 3) sivuNro = 3; // Tehdään latauspyyntö. lataaTieto(sivuNro); }; // Ja lopuksi satunnainen sivu. document.getElementById('satunnainen').onclick = function satunnainenClick() { // Numero 1, 2 tai 3 sivuNro = Math.floor(Math.random() * 3) + 1; // Tehdään latauspyyntö. lataaTieto(sivuNro); }; // Tämä koko funktio suoritetaan saman tien. Muoto siis (function(){})(); })();
En testannut, mutta todennäköisesti toimii. Sisältää paljon ajateltavaa. Kannattaa opetella ja selvitellä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.