PDA

Pogčedajte punu verziju : Java Script bug u FF zbog doctype-a!


flash_back
07. 12. 2006., 19:19
Jurim neko parce koda koje bi na odredjenu selektovanu opciju iz menia ispisalo odredjen sadrzaj.. I nadjem takvo parce koda..

<html>
<head>
<script language="javascript">
function showhide(checkval){
var colData = "Here is my hidden text.";
if (document.layers){
document.layers['mylayer'].document.open();
document.layers['mylayer'].document.write("<form name='mylayer'>");
document.layers['mylayer'].document.write(colData);
document.layers['mylayer'].document.write("</form>");
document.layers['mylayer'].document.close();
document.layers['mylayer'].visibility=(checkval=="hide") ? 'hide' : "show";
}
else{
document.all['mylayer'].style.visibility=(checkval=="hide") ? 'hidden' :"visible";
document.all.mylayer.innerHTML = colData;
}
}
</script>
</head>
<body>
<form>
<select name="myfield" onChange="showhide(this[this.selectedIndex].text);">
<option>hide</option>
<option>show</option>
</select>
</form>
<div id='mylayer' style="position:absolute;left:10px;top:500px">&nbsp;</div>
</body>
</html>

Konkretno script mi treba za kontakt stranu za rd sajt. Poenta je da imam par kontakt opcija [izrada sajta, graficki design, pitanja i sl.] za koje ce da se ispisuje drugaciji raspored polja..

Problem nastaje kada se script pokrene u FireFoxu. Licno, ovo mi se prvi put dogadja da neka stvar radi ok u Operi i I.E. a da ne radi u FF-u! Navikao sam se da Imbecil E. bude ta crna ovcica, al' eto i ovo da se dogodi.. :)

U pocetku nisam znao u cemu je problem, bilo je malo konfuzno jer scripta radi kada napravim novu stranu sa prikazanim kodom, ali ne i kada ubacim potrebne delove u kontakt stranicu. Malo sam cistio dokument i ispostavi se da je problem 'ladno u samom tipu dokumenta.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Isto je i sa [X]HTML Strict.. i svim mogucim varijantama. Script radi jedino bez doctype-a..

Stvarno svasta :) Neki predlozi za izmenu scripta? Ono 'innerHTML' mi izgleda sumljivo?

noviKorisnik
07. 12. 2006., 19:29
Rekao bih da je document.layers - umesto toga može po DOM-u document.getElementById ...

dee
07. 12. 2006., 19:34
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script language="javascript">
function showhide(checkval){
var colData = "Here is my hidden text.";
if (document.layers){
document.layers['mylayer'].document.open();
document.layers['mylayer'].document.write("<form name='mylayer'>");
document.layers['mylayer'].document.write(colData);
document.layers['mylayer'].document.write("</form>");
document.layers['mylayer'].document.close();
document.layers['mylayer'].visibility=(checkval=="hide") ? 'hide' : "show";
}
else{
document.getElementById('mylayer').style.visibilit y=(checkval=="hide") ? 'hidden' :"visible";
document.getElementById('mylayer').innerHTML = colData;
}
}
</script>
</head>
<body>
<form>
<select name="myfield" onChange="showhide(this[this.selectedIndex].text);">
<option>hide</option>
<option>show</option>
</select>
</form>
<div id='mylayer' style="position:absolute;left:10px;top:500px">&nbsp;</div>
</body>
</html>

sad radi

edit: eo me js guru preduhitrio :)

flash_back
07. 12. 2006., 19:59
Hvala ljudi :) ovo je bilo bas quicky ;)

poz i tnx X2 :)

flash_back
07. 12. 2006., 22:12
Ajd dok sam tu kod vas js gurua da iskoristim priliku.

E ovako, malo sam 'suzio' kod (ako nije ok recite) i promenio sa visibility:hiden na display:none. I vise 'ne jurim' text opcije vec id, prakticnije je.

<script language="javascript">
function showhide(checkval){
var colData = "1";
var colData2 = "2";

if (checkval==1){
document.getElementById("mylayer").style.display=(checkval=="hide") ? "none" :"block";
document.getElementById("mylayer").innerHTML = colData;
}
else if (checkval==2){
document.getElementById("mylayer").style.display=(checkval=="hide") ? "none" :"block";
document.getElementById("mylayer").innerHTML = colData2;
}
else {
document.getElementById("mylayer").style.display=(checkval=="hide") ? "none" :"block";
document.getElementById("mylayer").innerHTML = colData2;
}
}
</script>
<form>
<select name="myfield" onchange="showhide(this[this.selectedIndex].id);">
<option id="hide">hide</option>
<option id="1">show</option>
<option id="2">show2</option>
</select>
</form>

^ Ovo iznad 'sljaka', al neznas sto ovo nece:?

<script language="javascript">
function showhide(checkval){


var colData1 = "1";
var colData2 = "2";

var nesto = "colData" + checkval;

document.getElementById("mylayer").style.display=(checkval=="hide") ? "none" :"block";
document.getElementById("mylayer").innerHTML = nesto;

}
</script>
<form>
<select name="myfield" onchange="showhide(this[this.selectedIndex].id);">
<option id="hide">hide</option>
<option id="1">show</option>
<option id="2">show2</option>
</select>
</form>

MorenoArdohain
07. 12. 2006., 22:22
Radi ti i taj drugi kod, nije me mrzelo da proverim.
Samo, text se prikazuje u dnu strane (posto si stavio position 500px od vrha strane).

flash_back
07. 12. 2006., 23:20
Mislim radi kod, al ne ono sto bi ja zeleo.

Na selectovanje npr: show2 on bi trebao da printa '2' a ne 'colData2'.. Nesto ja tu neumem da sabiram :)

MorenoArdohain
07. 12. 2006., 23:24
Promeni
var nesto = "colData" + checkval;

u
var nesto = checkval;

flash_back
07. 12. 2006., 23:31
Hehe :) vidim od oka, printace to 'ok' vrednost.. ali ok jer je id i vrednost za isti ista ;)

MorenoArdohain
07. 12. 2006., 23:36
Ah, moze i tako, ali ako hoces da dodelis neki text za svaku opciju, onda izmeni da bude ovako:


var colData = new Array();
colData[1] = "poruka 1";
colData[2] = "poruka 2";

var nesto = colData[checkval];

flash_back
07. 12. 2006., 23:42
e to je to druze ;)

tnx :)