Avatar billede sup Nybegynder
14. september 2004 - 13:58 Der er 13 kommentarer og
1 løsning

dynamisk ændre baggrund på en table row !

Lille forklaring omkring siden...
Jeg har fjernet lidt af den unødvendige kode, håber det er forståligt. Min asp side som ligger i en iframe viser poster fra en database afhængig af en søgning brugeren laver. Det betyder at søgningen kan vise enten 0 eller 25000 poster som er max. Når brugeren så trykker på en post kaldes et javascript, som kalder en main del som viser den post brugeren har trykket på.

Problemmet:
Første javascript virker ikke efter hensigten. Hele min table row's background skal blive hvid og ikke kun cellen, som er det der sker. Min event.srcElement er åbenbart en td tror jeg. Desuden virker løkken heller ik, som egentlig sku resette alle table rows, hvis brugen har trykket på en post før. Men det har jeg fundet ud af ikke er optimalt hvis brugeren har søgt mange poster frem. På en eller anden måde skal den huske den post brugeren har trykket på før og kun resette den table row, det må være den bedste løsning vil jeg tro!

Kort og godt: Når man trykker på en link skal den table row linken ligger i blive hvid og hvis brugeren har trykket på en post før skal den sættes tilbage til default farve. :)

Er der nogen som kan hjælpe lidt og forstår problemmet?

Sup.

Koden:

<html>
<head>
<link REL="stylesheet" TYPE="text/css" HREF="styles.css">
<SCRIPT FOR="document" EVENT="onclick()" LANGUAGE="JavaScript">
var curElement = event.srcElement;
var ar=document.getElementById('poster').rows

for (var i=0; i<ar.length; i++){
ar[i].style.background = '#B4B4B4';
}
curElement.style.background = 'white';
</SCRIPT>

<SCRIPT language="JavaScript">
function vispost(bogid)
{
var bid;
bid = bogid;
parent.venstre.location="rediger_venstre.asp?bogid="+bid;
parent.hojre.location="rediger_hojre.asp?bogid="+bid;
focus();
}
</SCRIPT>
</head>
<body bgcolor="#B4B4B4">
<table id="poster" border="0" cellpadding="0" cellspacing="0">
<tr id="hmm" onclick="java script:vispost(<%=RS( "bogid")%>)" style="cursor: hand" onmouseover="this.style.backgroundColor = 'gray';" onmouseout="this.style.backgroundColor = '';">

<td><font face="verdana" size="1" color="black"><%=RS("titel" )%></td>
<td width="150"><font face="verdana" size="1" color="black"><%=RS( "forfatter" )%></td>
</tr>
<%
RS.MoveNext
WEND
%>
</table>
Avatar billede roenving Novice
14. september 2004 - 14:06 #1
Måske så:

<script type="text/javascript">var actRow=null;</script>
<SCRIPT FOR="document" EVENT="onclick()" LANGUAGE="JavaScript">
var curElement = event.srcElement.parentNode;
if(actRow)actRow.style.background = '#B4B4B4';
curElement.style.background = 'white';
actRow = curElement;
</SCRIPT>
Avatar billede sup Nybegynder
14. september 2004 - 14:26 #2
Den er der næsten roenving...cool.
Et lille problem er når jeg fjerner musen pga min onmouseover så skifter farven tilbage.

Et andet problem som jeg ik helt forstår er når min table row kun er linie blir hele table row hvid som er meningen :)
Men mange af mine table rows kan være flere linie pga lange titel navne og når man trykker på dem er det kun den celle som blir hvid.

Men er da lidt videre :)

Sup
Avatar billede sup Nybegynder
14. september 2004 - 14:34 #3
det virker på mig som om når jeg trykker på teksten i cellen blir den pågældende celle hvid og hvis jeg hvor der ikke står tekst bliver table row hvid. Ved ik helt om det er rigtigt! hmm.

Sup
Avatar billede roenving Novice
14. september 2004 - 14:40 #4
-- men du har jo også to actions på forskelligt niveau, jeg ville selv gøre sådan (og så ville det sikkert også virke i alle browsere !-)

<html>
<head>
<link REL="stylesheet" TYPE="text/css" HREF="styles.css">
<script type="text/javascript">
var actRow=null;
function showRow(elm){
  var curElement = elm.parentNode;
  if(actRow)actRow.style.background = '#B4B4B4';
  curElement.style.background = 'white';
  actRow = curElement;
}

function vispost(bogid){
  var bid;
  bid = bogid;
  parent.venstre.location="rediger_venstre.asp?bogid="+bid;
  parent.hojre.location="rediger_hojre.asp?bogid="+bid;
  focus();
}
</SCRIPT>
</head>
<body bgcolor="#B4B4B4">
<table id="poster" border="0" cellpadding="0" cellspacing="0">
<tr id="hmm" onclick="vispost(<%=RS( "bogid")%>);showRow(this);" style="cursor: pointer" onmouseover="this.style.backgroundColor = 'gray';" onmouseout="this.style.backgroundColor = '';">

<td><font face="verdana" size="1" color="black"><%=RS("titel" )%></td>
<td width="150"><font face="verdana" size="1" color="black"><%=RS( "forfatter" )%></td>
</tr>

-- jeg rettede også lige et par andre småting, men langtfra alt !-)
Avatar billede sup Nybegynder
14. september 2004 - 15:04 #5
thx roenving, lige ved og næsten q:)
og ja lidt spagetti kode ;)
der er stadig 2 ting desværre, som ik lige funger :/
Jeg forklarede mig måske heller ik så godt, men den hvide table row skal
forblive hvid selvom brugeren flytter musen. Og så er der den bug når man
trykker på selve titelen eller forfatter er det kun den celle som blir hvid og ikke hele table row'en...

håber du kan løse det for jeg har bokset med det nogle dage nu :/

Sup
Avatar billede roenving Novice
14. september 2004 - 15:20 #6
Det gør den da hos mig med den kode ?-)
Avatar billede sup Nybegynder
14. september 2004 - 15:39 #7
Underligt.
Hos mig bliver alt hvidt nu !
Jeg havde iøvrigt ikke slettet din tidligere kode,
kegler lidt rundt her :)

Sup.
Avatar billede sup Nybegynder
14. september 2004 - 16:56 #8
alert(event.srcElement.tagName)
alert(curElement.tagName)

Ved at teste med alert er jeg kommet frem til at event.srcElement altid er en TD hvilket så gjorde at kun den pågældende celle blev hvid.

var curElement = elm.parentNode; (gør at curElement blir TBODY)
Ved ik om TBODY er en table row?

Må teste videre :/

Sup
Avatar billede roenving Novice
14. september 2004 - 17:18 #9
Argh, jeg havde jo flyttet rundt på noget, men ikke taget den fulde konsekvens !-)

-- men nu kan jeg heller ikke få den hvide frem, men mouseoveren overskriver jo også !-)

function showRow(elm){
  if(actRow)actRow.style.backgroundColor = '#B4B4B4';
  elm.style.backgroundColor = 'white';
  actRow = elm;
}
Avatar billede sup Nybegynder
14. september 2004 - 17:36 #10
Damn, det er ellers perfekt! :) (også når jeg viser mange poster, før hang den nemlig pga løkken, som tog lidt tid at køre igennem. nice)

Kan godt se problemmet med at min mouseover overruler, så det er
nok nødvendigt at flytte den derfra og disable mouseover på den
pågældende table row når brugeren har trykket!

Nogen ideer roenving?, du har den jo næsten :))
Jeg skal nok give dig point alligevel, da du helt klart fortjener dem.

Du skal ihvertfald ha mange tak indtil videre. Jeg er mega taknemlig.
Har nemlig rodet med det problem ret længe synes jeg og man synes ik
man kommer nogen veje.

Du må lige give et svar ved lejlighed :)

Sup.
Avatar billede roenving Novice
14. september 2004 - 17:44 #11
Ha, lidt pilleroderage kan klare den:

function showRow(elm){
  if(actRow){
    actRow.style.backgroundColor = '#B4B4B4';
    actRow.onmouseover = function(){this.style.backgroundColor = 'gray';};
    actRow.onmouseout = function(){this.style.backgroundColor = '';};
  }
  elm.style.backgroundColor = 'white';
  elm.onmouseover = null;
  elm.onmouseout = null;
  actRow = elm;
}
Avatar billede roenving Novice
14. september 2004 - 17:45 #12
-- og velbekomme '-)
Avatar billede sup Nybegynder
14. september 2004 - 18:24 #13
Yehaa, det ser bare så smukt ud roenving :-))
Du er eksperten *g*

*bukker og takker*
Stay cool..
Sup.
Avatar billede roenving Novice
14. september 2004 - 23:41 #14
Tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester