Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Javascriptin opettelua

Sivun loppuun

novari [03.05.2011 10:47:57]

#

Tuntuu olevan vaikeaa tämä jascriptin opettelu. Olen jo pariviikkoa yrittänyt saada div:n taustaväriä vaihdettua huonoin tuloksin. Googlettamalla olen löytänyt sivuja joissa on näytetty miten tuo tehdään. Ei onnistu, ei! No ajattelin että kopsaan koko esimerkin yhdeltä sivulta ja kokeilen sitä, ei onnistu. Missä minulla menee pieleen koko homma?
Tässä esimerkkikoodi jonka netistä poimin:

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<SCRIPT TYPE="text/javascript">
<!--
function mouseover()
{
	document.getElementById("thediv").style.backgroundcolor='black';
}
function mouseout()
{
	document.getElementById("thediv").style.backgroundcolor='red';
}

//-->
</SCRIPT>

</HEAD>
<BODY>

<div style="width:200px; height:200px; border:solid thin black" id=thediv onmouseover="mouseover()" onmouseout="mouseout()">
</div>

</BODY>
</HTML>

Eikös tuo ohjelma pitäisi vaihtaa väriä kun hiiren vie divin päälle ja pois? Minulla ei toimi. Jos laitan funktioon document.bgcolor."väri" niin se toimii.

Teuro [03.05.2011 10:55:39]

#

Seuraavilla muutoksilla lähti toimimaan.

<!DOCTYPE html>
<html>
	<head>
		<title></title>
		<script type="text/javascript">
			function mouseover() {
				document.getElementById("thediv").style.backgroundColor='black';
			}

			function mouseout() {
				document.getElementById("thediv").style.backgroundColor='red';
			}
		</script>
	</head>
	<body>
		<div style="width:200px; height:200px; border:solid thin black" id="thediv" onmouseover="mouseover()" onmouseout="mouseout()"></div>
	</body>
</html>

novari [03.05.2011 11:06:43]

#

Hienoa! Nyt toimii omakin versio divin taustavärinvaihdosta. Kiiiitos!
Näköjään netistä ei aina löydy täyttä totuutta.

jo123 [03.05.2011 12:10:29]

#

novari kirjoitti:

Näköjään netistä ei aina löydy täyttä totuutta.

Hienoa kun oivalsit asian. =)

The Alchemist [03.05.2011 13:07:15]

#

Älkää sitten suotta käyttäkö tuollaiseen JavaScriptiä tuotantoversioissa. Perustyylit on tarkoitus ja kätevämpääkin toteuttaa CSS:llä. Tällöin ne myös toimivat ilman JavaScript-tukea. Itse usein teen niin, että laitan CSS:ään valmiit tyylit ja JS:llä vain päivitän class- ja id-attribuutteja.

novari [03.05.2011 14:06:55]

#

Itselläni on CSS:llä tehdyt tyylit mutta kun yritän tehdä sillai että käyttäjä voi vaihtaa tausta- ja kirjoitusväriä div:ssä. Kyseessä on kortintekoohjelma, onnittelu- joulu- pääsiäis- ym. korttien tekoa kotisivuilla.
Siitä pääsenkin toiseen kysymykseen, miten saan div:stä kirjoitetun tekstin talletettua? Javascriptillä tuo varmaankin tehdään mutta kun olen vielä aloitteleva tällä kielellä niin ei ainakaan heti tule mieleen millä tuon toteuttaisin.

tsuriga [04.05.2011 09:19:21]

#

Kannattaa myös tutustua tapahtumankuuntelijoihin, joiden avulla saavutetaan mm. selkeämpi rakennemerkkaus (HTML-koodi). En ole aivan varma, mitä nyt haet kysymyksellä: haluatko diviin kirjoitetun tekstin (textContent-ominaisuus), tai kenties divin koko sisällön (innerHTML)? Haluatko tallentaa nämä käyttäjän koneelle (localStorage-objekti tai keksit) vai palvelimelle (joudut käyttämään jotakin palvelinpuolen ohjelmointikieltä, kuten vaikkapa PHP tai Python). Firebug, IE Developer Tools ja Opera Dragonfly ovat oivia työkaluja elementtien ominaisuuksien tutkailemiseen.

novari [05.05.2011 10:57:49]

#

Minulla on näköjään pallo hukassa. Olen tehnyt suurimman osan kotisivuista php:lla. Tarkoitus olisi että käyttäjä voisi kirjoittaa tekstiä div:iin josta se sitten talletetaan palvelimelle. Taitaa olla utopiaa kun meinasin tehdä sillai että kortti näyttää tekovaiheessa samalta kuin valmiina. Jos käytän textareaa niin valmis tuotos ei ole samanlainen. Tiedonpuute "tyssäsi" siihen miten divi:iin kirjoitetaan ja miten kirjoitus talletetaan?
Olen selannut nettiä mutta en osaa tietenkään hakea oikeilla hakusanoilla oikeaa tietoa.

punppis [05.05.2011 11:17:15]

#

Kyllä sen pitäisi samanlaiselta näyttää, jos css-tyyli on identtinen divin kanssa. Se pitää kyllä manuaalisesti sille textarealle tehdä.

novari [05.05.2011 12:03:41]

#

Muuten kyllä mutta kun taustan ja kirjoitusvärin vaihto ei onnistu textarealla.

LaNu [05.05.2011 16:41:55]

#

novari kirjoitti:

Muuten kyllä mutta kun taustan ja kirjoitusvärin vaihto ei onnistu textarealla.

Onnistuu, ei mitään ongelmaa. Onnistuu jopa IE:lla, kunhan ensin vääntää IE:lle kelpaavaa javascriptiä toisen mokoman normi-js:n päälle. Siltikin lomake-elementtien kanssa törmää kaikenlaisiin ihmeellisyyksiin IE:n kanssa.

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <script type="text/javascript">
			function load() {
				// select-elementille change-listener EI-tyyliin
				bgSelectEle = document.getElementById('bgColor');
				bgSelectEle.attachEvent("onchange", function(evt) {
					// selvitetään valittu option EI-tyyliin
					selectEle = document.getElementById('bgColor');
					colorName = selectEle.options[selectEle.selectedIndex].value;
					// vaihdetaan väri
					document.getElementById('mybox').style.backgroundColor = colorName;
				});
			}
        </script>
		<style type="text/css">
			#mybox {
				width:200px; height:200px; border:solid thin black;
				overflow: hidden; /* IE ei vissiin piilota scrolbaria muuten? */
			}
			.pink { background-color: pink; color: black; }
			.black { color: pink; background-color: black; }
		</style>
    </head>
    <body onload="load()">
		<form>
		<fieldset id="mybox_wrapper">
			<textarea id="mybox" class="pink">DADADA</textarea>
		</fieldset>
		<fieldset><legend>Värit</legend>
		<label>Tausta:
			<select id="bgColor">
				<option>pink</option>
				<option>silver</option>
			</select>
		</label>
		</fieldset>
		</form>
    </body>
</html>

tsuriga [05.05.2011 16:55:24]

#

IE9:ssä toimii sama addEventListener.

novari [06.05.2011 11:21:39]

#

Vaikka en saannut esimerkkiä toimimaan niin paljon uutta asiaa tuli opeteltavaksi.
Kiitos LaNu!

novari [08.05.2011 10:55:04]

#

Viittiskö joku katsoa mikä vika tuossa LaNu:n esimerkkikoodissa on kun se ei toimi. Itse vasta opettelen JS joten en löydä vikaa. Toimivalla esimerkillä oppii paljon helpommin.

Hennkka [08.05.2011 16:31:07]

#

LaNun koodi on suunnattu IElle, joten se ei toimi muissa selaimissa. Tässä versio, joka toimii ainakin Firefoxissa (ja miksei myös muissa):

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <script type="text/javascript">
            function load() {
                // select-elementille change-listener IE-tyyliin
                // -Asetetaan listener muiden selainten tavalla
                bgSelectEle = document.getElementById('bgColor');
                // bgSelectEle.attachEvent("onchange", function(evt) {
                bgSelectEle.addEventListener("change", function() {
                    // selvitetään valittu option IE-tyyliin
                    // -Miten eroo muista?
                    selectEle = document.getElementById('bgColor');
                    colorName = selectEle.options[selectEle.selectedIndex].value;
                    // vaihdetaan väri
                    document.getElementById('mybox').style.backgroundColor = colorName;
                }, false); // -Loppuun vielä false
            }
        </script>
        <style type="text/css">
            #mybox {
                width:200px; height:200px; border:solid thin black;
                overflow: hidden; /* IE ei vissiin piilota scrolbaria muuten? */
            }
            .pink { background-color: pink; color: black; }
            .black { color: pink; background-color: black; }
        </style>
    </head>
    <body onload="load()">
        <form>
        <fieldset id="mybox_wrapper">
            <textarea id="mybox" class="pink">DADADA</textarea>
        </fieldset>
        <fieldset><legend>Värit</legend>
        <label>Tausta:
            <select id="bgColor">
                <option>pink</option>
                <option>silver</option>
            </select>
        </label>
        </fieldset>
        </form>
    </body>
</html>

Tämä voi auttaa selainten erojen ratkaisemisessa.

Metabolix [08.05.2011 16:49:02]

#

Olisi suotavaa tehdä muuttujista (bgSelectEle, selectEle, colorName) var-sanalla paikallisia, vaikkei tuosta tällä kertaa aiheudukaan ongelmia.

novari kirjoitti:

Itse vasta opettelen JS joten en löydä vikaa.

Aika huono tekosyy. Voisit ottaa seuraavaksi oppimistavoitteeksesi selaimen virhekonsolin avaamisen. Sinne tulee selvä ilmoitus tuonkin koodin ongelmasta. Ilmoituksessa näkyy yleensä tiedosto, rivinumero ja virheen laji. Esimerkiksi Chromiumin konsolissa ilmoitus näyttää suunnilleen tältä:

koe.html:11: Uncaught TypeError: Object #<HTMLSelectElement> has no method 'attachEvent'

Chromiumissa ja muistaakseni Operassa on valmiiksi laadukas konsoli. Firefoxiin kannatta asentaa Firebug.

tsuriga [08.05.2011 17:01:49]

#

Hennkka kirjoitti:

LaNun koodi on suunnattu IElle

Siis IE < 9.

Mukailevat esimerkit:

Koodissa kommentit. Alla "natiivi"-JS -esimerkki.

// Run when DOM tree is ready
window.addEventListener('DOMContentLoaded', function(e) {
    // Fetch first HTMLSelectElement in the DOM tree
    var select = document.getElementsByTagName('select')[0],
    // Fetch first HTMLTextAreaElement in the DOM tree that has class 'pink'
        myBox = document.getElementsByClassName('pink')[0];

    // Bind 'change' event listener to the HTMLSelectElement
    // Ie. given function is run each time when select element's selection changes
    select.addEventListener('change', function(e) {
        // Set the text area's class to whatever was selected from the dropdown
        myBox.className = this.options[this.selectedIndex].value;
    }, false);
}, false);

EDIT:
Chromessa on Developer Tools, Firefoxille on Firebug-lisäosa, Internet Explorer 9:ssä on Developer Toolbar, Operassa Opera Dragonfly, Safarissa Developer Debug Console. Firebugin saa toimimaan myös muissa selaimissa lite-versiona.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta