Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: IE8 kasilla tää toimii?

Sivun loppuun

Paulus M [29.10.2009 16:47:44]

#

eli tuollaisessa formissa on select jutun kanssa ongelmia - Firefoxilla toimii, osaisko joku sanoa, että miks ei toimi IE:ssä?

var valitsev=document.getElementById("kampanjakesto")
valitsev.onchange=function()
{

	var valittuarvo=this.options[this.selectedIndex];
	document.write(valittuarvo.value);
//deguggaus rivi, heittää virheen, koska valittuarvo.value:ssa on jotain mätää
	paivitaTulosteet("kampanjakesto", valittuarvo.value);
}

Merri [29.10.2009 22:24:00]

#

Lähtisin aluksi purkamaan sillä, että vaihtaisin document.writen johonkin muuhun. Helppona ratkaisuna kokeile vaikka alertia. document.write nostaa ainakin omalla kohdalla aina karvat pystyyn, mieluummin manipuloisin DOMin kautta tai käyttäisin innerHTML:ää.

Muoks!
jQuery-jutustelua aiheesta

Metabolix [29.10.2009 22:54:27]

#

Debuggauksen alkeet: tarkista funktion alussa kaikki arvot, ja laita koodi try-lohkoon.

var e;
try {
  alert("this: " + this);
  alert("options: " + this.options);
  alert("index: " + this.selectedIndex);
  alert("options[i]: " + this.options[this.selectedIndex]);
  alert("options[i].value: " + this.options[this.selectedIndex].value);
} catch (e) {
  alert(e);
}

Paulus M [29.10.2009 23:42:16]

#

No pistinpä tuolta debuggausta jo tulostus laitto kaikkien arvoksi
[object] paitsi että toi selectedindex palautti numeron, niin kuin kuuluu.
Viimeinen rivi palautti tyhjää arvon.

Metabolix [29.10.2009 23:45:00]

#

Eli homma on muuten aivan kunnossa mutta option-tagin value-attribuutti on ilmeisesti tyhjä (tai puuttuu). Jatka samantapaista alert-debuggausta koodissa edemmäs, kunnes virhekohta löytyy.

Paulus M [30.10.2009 14:03:08]

#

Joo, olet oikeassa, mulla oli pelkästään <option>4</option>, eli value arvo puuttui. Nyt merkkasin näin: <option option value = '4' >4</option>
Ja homma toimii aina välillä! Eli esim. this.options[this.selectedIndex].value arvo löytyy, jos käytän tuota sun debuggaus riviä, mutta jos kutsun sitä ilman sun riviä, niin eipä enää löydykkään - hämärää.

var valitsev=document.getElementById("mainoskesto")
valitsev.onchange=function()
{
        //Jos laitan tähän tuon debuggaus rivin, niin homma toimii - ilman sitä ei toimi.
	var valittuarvo=this.options[this.selectedIndex].value;
	paivitaTulosteet("mainoskesto", valittuarvo.value);
}
function paivitaTulosteet(aihe, arvo)
{
	//tulosteen alku ja lopputunnisteet:
	var tulos1 = "hinta: ";
	var tulos1loppu = "€";

	var tulos2 = "kontaktiennuste: ";

	//päivita arvo scriptiin:
	if(aihe == "aloitusviikko"){aloitusviikko = arvo; alert("kutstuttu");}
	if(aihe == "kampanjakesto")kampanjakesto = arvo;
	if(aihe == "mainoskesto")mainoskesto = arvo;
	if(aihe == "taksilkm")taksilkm = arvo;

	//laske hinta
	var hinta = (kampanjakesto * perusmainos + (mainoskesto - 10)* hintapersek)*taksilkm;
	document.getElementById("tulos1").innerHTML = tulos1 + hinta + tulos1loppu;

	//laske kontakti ennuste:
	var kontakti = taksilkm * kontaktejapertaksi * kampanjakesto;
	document.getElementById("tulos2").innerHTML = tulos2 + kontakti;
	document.getElementById("tulos3").innerHTML = kampanjakesto;
	document.getElementById("tulos4").innerHTML = taksilkm;

}

EDIT: miten vois välttää tämän ainaisen selain riippuvuus jutun - ihan sama mitä tahansa tekee javascriptillä, niin ei voi sitte koskaan toimia ykkösellä toisilla selaimilla. Onko missään mitään ohjetta missä selitetään näitä Javascriptin vaara kohtia tai jotain, missä selitetään mitä tulee käyttää ja mitä ei. Täytyy kyllä sanoa, että monet ohjelmointikielet ja järjestelmät on viisaasti suunniteltu, mutta yks mikä kusee niin on Javascript(välillä se on niin ku ihan sekoa), HMTL ja CSS, mitkä ei vaan sitten yksinkertaisesti voi toimia kaikilla selaimilla samalla tavalla. Ja välillä tulosteet riippuu ihan tuurista, joskus toimii, joskus ei, C++ on siitä hieno, että se sentään osaa valittaa ja varoittaa, eikä päästä läpi mitään epäselkyyksiä.

Merri [30.10.2009 14:32:45]

#

Höps höps, pistä HTML kuntoon, ei näin:
<option option value = '4' >4</option>

vaan näin:
<option value="4">4</option>

Ylimääräiset välit ovat haitaksi erityisesti =-merkin molemmin puolin, koska HTML-standardin mukaan väli erottelee attribuutit toisistaan, paitsi jos väli on arvon merkkaavien lainausmerkkien sisällä. Selaimet toki yrittävät ymmärtää virheellistäkin koodia, mutta aina ei veikkaamalla tule voittoja.

(Mod. huom: viestejä voi poistaa muokkaussivulta itsekin.)

Paulus M [30.10.2009 14:53:35]

#

(Mun piti vaan tarkistaa yks asia nopeasti :D )

Joo, korjasin jo ei vieläkään virhe löydy - kyllä sitä aina välillä ihmettelee, että onpa kyllä vietätävän hämärää.

Mutta Kiitokset Merri jo neuvoista.

EDIT:

<form id = "syoteformi">

....

  <br>
 kampanjan kesto:
 <br>
 <select id="kampanjakesto">
  <option>valitse</option>
  <option value="4">4</option>
  <option value="6">6</option>
  <option value="8">8</option>
  <option value="10">10</option>
  <option value="12">12</option>
 </select>
....
</form>

EDIT2:
Ei vaan sain sen toimimaan, virhe johtuu siitä, että ku alan korjailemaan niin korjaan päällekkäin ja kun virhe on saatu korjattua, niin olen tehnyt toisen virheen toiseen kohtaan.


Sivun alkuun

Vastaus

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

Tietoa sivustosta