webForumDet fria alternativet

dölja/visa text i en <div>

3 svar · 236 visningar · startad av tlee

tleeMedlem sedan mars 2001290 inlägg
#1

hej!

ett problem.

<tr>
<td>
<select name=select_1 OnChange="calc('txt_1','artikel1');">
<option>1</option>
</select>
<div id="txt_1"></div>
</td>
</tr>

<tr>
<td>
<select name=select_2 OnChange="calc('txt_2','artikel2');">
<option>1</option>
</select>
<div id="txt_2"></div>
</td>
</tr>

funktionen calc ser ut såhär


function Calc(Id, strArticleNr){

string = "<a bref=# OnClick=javascript:OpenWindow('info.asp?id="+strArticleNr+"')>a</a>";

if (document.all){
document.all[Id].innerHTML = string;
} else if (document.getElementById){
jxdocrange = document.createRange();
jxdocrange.setStartBefore(document.getElementById(Id));
while (document.getElementById(Id).hasChildNodes()){
document.getElementById(Id).removeChild(document.getElementById(Id).lastChild);
}
document.getElementById(Id).appendChild(jxdocrange.createContextualFragment(string));
}

}

Ovan funktion är skriven av jojoxx, all heder åt honom!
Anyways vad jag vill skall hända är att när man ändrar val i någon av droplistorna så
skall det komma en länk till höger om den man valt. och den andra selecten som inte längre är "vald"
skall "släckas" och inte visa någon länk.

som det är nu så "släcker" han inte de "<select>" som har tappat focusen. utan det hamnar länkar
jämte varje <select> tillslut vilket inte är bra.

en annan grej som irriterar är att <div> skapar en radbrytning går det fixa?

/tobias

JojoxxMedlem sedan juni 20004 308 inlägg
#2
var lastid=false;
function calc(Id, strArticleNr){
lastid=Id;
string=(strArticleNr)?"<a href=\"#\" OnClick=\"OpenWindow('info.asp?id="+strArticleNr+"');\">a</a>":"";
if (document.all){
	document.all[Id].innerHTML = string;
} else if (document.getElementById){
	jxdocrange = document.createRange();
	jxdocrange.setStartBefore(document.getElementById(Id));
	while (document.getElementById(Id).hasChildNodes()){
		document.getElementById(Id).removeChild(document.getElementById(Id).lastChild);
	}
	document.getElementById(Id).appendChild(jxdocrange.createContextualFragment(string));
}
}

och

OnChange="if(lastid){calc(lastid,'')} calc('txt_1','artikel1');"

en annan grej som irriterar är att <div> skapar en radbrytning går det fixa?

Det beror på avv <div> är ett block-element. Byter du ut det mot <span> som är ett inline-element försvinner radbrytningen.

tleeMedlem sedan mars 2001290 inlägg
#3

funkar nästan

jag bugar jojoxx!

verkar vara något som strular dock, jag får följande fel.

'lastid' är odefinierad
rad 160

rad 160 ser ut som nedan.

<select name="_level_1" OnChange="if(lastid){Calc(lastid,'1','2')} Calc('txt_1','1','2');">

variabeln är definierad utanför Calc();

<script language=javascript>
<!--

var lastid=false;

function Calc(Id, CurrentPos, iMax){

Jag har ändrat lite vilka värden den skickar med, strArticleNr plockar jag upp senare, men det bör
väl inte ha med detta problemet att göra?

JojoxxMedlem sedan juni 20004 308 inlägg
#4

När jag kör det så fungerar det perfekt. Ett par saker som jag kan tänka mig är dessa:

* Du har skiftat lite gemener och VERSALER mellan exemplen, ex. calc() och Calc() - detta är inte samma sak, kinkigt.

* Kolla så att du inte har några HTML-felaktigheter som gör att script-blocket inte exekveras. Ingen kommentarstag, avslutad html-tag eller något innan själva scriptet?

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)