Avatar billede dotcom1 Nybegynder
06. januar 2006 - 09:16 Der er 12 kommentarer og
1 løsning

Highlight tr onMouseOver

Hej.

Jeg har fundet dette script, som kan noget af det, jeg søger. Det ændrer baggrundsfarven på table rows ved hover:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Test</title>
<style type="text/css">

p, td, th {
    font: 0.8em Arial, Helvetica, sans-serif;
}
.tabdata {
    border: 1px solid #D6DDE6;
    border-collapse: collapse;
    width: 80%;
}
.tabdata tr {
    background-color: #FFFFFF;
}
.tabdata td {
    border: 1px solid #D6DDE6;
    padding: 4px;
    color: #000000;
}
.tabdata th {
    border: 1px solid #828282;
    background-color: #BCBCBC;
    font-weight: bold;
    text-align: left;
    padding-left: 4px;
    color: #000000;
}
.tabdata tr.altrow {
    background-color: #DFE7F2;
}

.tabdata tr:hover, .tabdata tr.hilite {
    background-color: #CFD7E2;
}
</style>
<script type="text/javascript">

/***********************************************
* Highlight Table Cells Script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* Visit http://www.dynamicDrive.com for hundreds of DHTML scripts
* This notice must stay intact for legal use
***********************************************/

//Specify highlight behavior. "TD" to highlight table cells, "TR" to highlight the entire row:
var highlightbehavior="TR"

var ns6=document.getElementById&&!document.all
var ie=document.all

function changeto(e,highlightcolor){
source=ie? event.srcElement : e.target
if (source.tagName=="TABLE")
return
while(source.tagName!=highlightbehavior && source.tagName!="HTML")
source=ns6? source.parentNode : source.parentElement
if (source.style.backgroundColor!=highlightcolor&&source.id!="ignore")
source.style.backgroundColor=highlightcolor
}

function contains_ns6(master, slave) { //check if slave is contained by master
while (slave.parentNode)
if ((slave = slave.parentNode) == master)
return true;
return false;
}

function changeback(e,originalcolor){
if (ie&&(event.fromElement.contains(event.toElement)||source.contains(event.toElement)||source.id=="ignore")||source.tagName=="TABLE")
return
else if (ns6&&(contains_ns6(source, e.relatedTarget)||source.id=="ignore"))
return
if (ie&&event.toElement!=source||ns6&&e.relatedTarget!=source)
source.style.backgroundColor=originalcolor
}

</script>

</head>

<body>
<table class="tabdata" onMouseover="changeto(event, 'lightgreen')" onMouseout="changeback(event, 'white')">
<tr>
    <th scope="col">Employee Name</th>
    <th scope="col">Department</th>
    <th scope="col">Date of Birth</th>
    <th scope="col">Year Hired</th>
</tr>
<tr>
    <td>John Doe</td>
    <td>Marketing</td>
    <td>23/05/1981</td>
    <td>2001</td>
</tr>
<tr class="altrow">
    <td>Bruce Porter</td>
    <td>Security</td>
    <td>18/08/1973</td>
    <td>1998</td>
</tr>
<tr>
    <td>Kate Simpson</td>
    <td>Human Resources</td>
    <td>19/03/1982</td>
    <td>2004</td>
</tr>
<tr class="altrow">
    <td>Bill McCormick</td>
    <td>Technology</td>
    <td>12/06/1964</td>
    <td>1999</td>
</tr>
<tr>
    <td>John Hazlewood</td>
    <td>Management</td>
    <td>13/03/1963</td>
    <td>Fired</td>
</tr>
<tr class="altrow">
    <td>Patrick Mouse</td>
    <td>Technology</td>
    <td>24/08/1964</td>
    <td>2000</td>
</tr>
<tr>
    <td>Ronald Simpson</td>
    <td>Technology</td>
    <td>13/03/1982</td>
    <td>2003</td>
</tr>
</table>
</body>
</html>

Problemet er, at når musen fjernes fra en <tr> så ændres farven til hvid. Ovenstående er en test; normalt genereres mine tables dynamisk (via et perl-script) og får automatisk en baggrundsfarve på hver anden <tr> så jeg kunne godt tænke mig at den oprindelige farve - og ikke hvid - kom tilbage ved mouseOut. Kan det lade sig gøre i scriptet?

Mvh.
Avatar billede mm12010 Nybegynder
06. januar 2006 - 09:20 #1
det burde kunne klares ved at at sende en tom streng med i fuktionskaldet på tabellen:
onmouseout="changeback(event,'');"
Avatar billede dotcom1 Nybegynder
06. januar 2006 - 09:37 #2
Jeg får fejl i linie 66:

65. function contains_ns6(master, slave) { //check if slave is contained by master
66. while (slave.parentNode)
67. if ((slave = slave.parentNode) == master)
Avatar billede dotcom1 Nybegynder
06. januar 2006 - 09:38 #3
Den melder: Slave has no properties.
Avatar billede mm12010 Nybegynder
06. januar 2006 - 09:44 #4
i hvilken browser?
Avatar billede dotcom1 Nybegynder
06. januar 2006 - 09:45 #5
Firefox. IE siger ikke noget.
Avatar billede mm12010 Nybegynder
06. januar 2006 - 09:47 #6
hmm... jeg får ingen fejl... hvordan ser hele table-tag ud efter ændringen?
Avatar billede dotcom1 Nybegynder
06. januar 2006 - 09:54 #7
Mener du det her:

<table class="tabdata" onMouseover="changeto(event, '#ff9900')" onMouseout="changeback(event, '')">

:)
Avatar billede mm12010 Nybegynder
06. januar 2006 - 09:58 #8
ahh... det er fordi du køre musen direkte ind i/over JavaScript-konsollen, det kan klares ved at ændre funktionen i linie 65 til:

function contains_ns6(master, slave) { //check if slave is contained by master
if(!slave) return false;
while (slave.parentNode)
if ((slave = slave.parentNode) == master)
return true;
return false;
}
Avatar billede dotcom1 Nybegynder
06. januar 2006 - 10:02 #9
Jaa, det virker! Hvordan pokker regnede du det ud? :)
Avatar billede dotcom1 Nybegynder
06. januar 2006 - 10:15 #10
Og læg lige et svar, i øvrigt.
Avatar billede mm12010 Nybegynder
06. januar 2006 - 10:18 #11
om jeg regnede noget særligt ved jeg ikke, men når man kan finde en fejl kan man ofte oz rette den, men jeg ikke påstå at jeg har regnet ud hvorfor fejlen opstod...
Avatar billede dotcom1 Nybegynder
06. januar 2006 - 10:23 #12
Okay - men er glad for at det virker. Tak for hjælpen. :)
Avatar billede mm12010 Nybegynder
06. januar 2006 - 10:28 #13
selv tak :o)
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