Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Таблица "Зебра" на js
 
 автор: Tegis   (21.07.2009 в 18:05)   письмо автору
 
 

Добрый день... Вот сделал у себя на сайте таблицу "Зебру" . Подскажите пожалуйста как сделать чтобы при наведение на строчку (весь tr) она подсвечивалась.
вот js код
function fgetAllDataTables()
{
    if (!document.getElementsByTagName) return false;

    var eleTables = document.getElementsByTagName("table");

    for (var i=0; i < eleTables.length; i++)
    {
        if (eleTables[i].className == "datatable")
        {
            fStripes(eleTables[i]);
        }
    }
}

function fStripes(eleTable)
{
    var eleTableRows = eleTable.getElementsByTagName("tr");

    for (var i=1; i < eleTableRows.length; i++)
    {
        eleTableRows[i].className = "trcolor";
        i++;
    }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(fgetAllDataTables);



<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Демо</title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<script src="js.js" type="text/javascript"></script>
<style type="text/css">

.trcolor {    background-color: #F93;}
table {margin:0 0px}
th {background:#006699; color:#fff}
td, th {border:1px solid #000; padding:5px 10px}

</style>
</head>
<body id="home">
    <table class="datatable">
        <tr>
            <th>Продукт</th>
            <th>Кол-во</th>
            <th>Цена</th>
        </tr>
        <tr>
            <td>Колбаса</td>
            <td>5</td>
            <td>Ј235</td>
        </tr>
        <tr>
            <td>Мясо</td>
            <td>2</td>
            <td>Ј56</td>
        </tr>
        <tr>
          <td>Картошка</td>
          <td>54</td>
          <td>&pound;432</td>
      </tr>
        <tr>
          <td>Йогурт</td>
          <td>3</td>
          <td>&pound;1</td>
      </tr>
        <tr>
          <td>Огурцы</td>
          <td>21</td>
          <td>&pound;999</td>
      </tr>
        <tr>
            <td>Рыба</td>
            <td>3</td>
            <td>Ј72</td>
        </tr>
    </table>
</body>
</html>


С уважением Анатолий.. Надеюсь на помощь

  Ответить  
 
 автор: sim5   (21.07.2009 в 18:28)   письмо автору
 
   для: Tegis   (21.07.2009 в 18:05)
 

<style>
  .light {
      background-color: #DBDBDB;
  }
  .nolight {
      background-color: White;
  }
</style>
<table class="datatable"> 
        <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"> 
            <th>Продукт</th> 
            <th>Кол-во</th> 
            <th>Цена</th> 
        </tr> 
        <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"> 
            <td>Колбаса</td> 
            <td>5</td> 
            <td>Ј235</td> 
        </tr> 
        <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"> 
            <td>Мясо</td> 
            <td>2</td> 
            <td>Ј56</td> 
        </tr> 
        <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"> 
          <td>Картошка</td> 
          <td>54</td> 
          <td>&pound;432</td> 
      </tr> 
        <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"> 
          <td>Йогурт</td> 
          <td>3</td> 
          <td>&pound;1</td> 
      </tr> 
        <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"> 
          <td>Огурцы</td> 
          <td>21</td> 
          <td>&pound;999</td> 
      </tr> 
        <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"> 
            <td>Рыба</td> 
            <td>3</td> 
            <td>Ј72</td> 
        </tr> 
    </table>

  Ответить  
 
 автор: Tegis   (21.07.2009 в 23:44)   письмо автору
 
   для: sim5   (21.07.2009 в 18:28)
 

Не пашет=(((( Я вывожу в пхп через printf
а там используется """
<?php 
do {
$id $myrow2['id'];
$result3 mysql_query("SELECT id FROM akkt WHERE executor=$id",$db);

$num mysql_num_rows($result3);
printf("<tr onmouseover='this.className='light';' onmouseout='this.className='nolight';'><td><a href='executor.php?id=%s'>%s</a></td><td>%s</td></tr>"$myrow2['id'],$myrow2['name'],$num);}
while(
$myrow2 mysql_fetch_array($result2)); ?>

так не пашет=((

  Ответить  
 
 автор: sim5   (22.07.2009 в 07:33)   письмо автору
 
   для: Tegis   (21.07.2009 в 23:44)
 

А учиться экранировать кавычки не пробовали? И забудьте о do while.
<?php  
while($myrow2 mysql_fetch_assoc($result2)) { 
  
$id $myrow2['id']; 
  
$result3 mysql_query("SELECT id FROM akkt WHERE executor=$id",$db); 
  
$num mysql_num_rows($result3); 
  
printf('<tr onmouseover="this.className=\'light\';" onmouseout="this.className=\'nolight\';"><td><a 
           href="executor.php?id=%s">%s</a></td><td>%s</td></tr>'
$myrow2['id'],$myrow2['name'],$num); 
}
?>

Не используйте mysql_fetch_array или, если используете, то хотя бы указывайте тип получаемого массива, в вашем случае:
($myrow2 = mysql_fetch_array($result2, MYSQL_ASSOC))

А вообще есть mysql_fetch_assoc.
Вот это, скорее всего, можно получить единым запросом еще в $result2
$result3 = mysql_query("SELECT id FROM akkt WHERE executor=$id",$db);

В раздел MySQL к доктору Trianon, он послушает и выпишит рецепт :)

  Ответить  
 
 автор: Tegis   (22.07.2009 в 11:45)   письмо автору
 
   для: sim5   (22.07.2009 в 07:33)
 

При наведении он меняет цвет tr
но он его и сохраняет. То есть стоит провести по всей таблице и она вся белая)) Цвет меняется только при рефреше страницы=(

  Ответить  
 
 автор: sim5   (22.07.2009 в 12:33)   письмо автору
 
   для: Tegis   (22.07.2009 в 11:45)
 

Вы просмотрите, что у вас получается в итоге (HTML-результат страницы вашей), а она должна быть такой (по событиям), как выглядит код, который я приводил выше. Если это так, то все должно работать.

  Ответить  
 
 автор: Trianon   (22.07.2009 в 13:38)   письмо автору
 
   для: sim5   (22.07.2009 в 07:33)
 

Sim5, не прибедняйтесь!
Ваши попытки выдать себя за фельшера не могут обмануть даже новичка :)
Можно подумать, я что-то другое пропишу нежели Вы.

  Ответить  
 
 автор: sim5   (22.07.2009 в 13:51)   письмо автору
 
   для: Trianon   (22.07.2009 в 13:38)
 

Ну на операционный стол MySQL я не рискну пациента ложить :)

  Ответить  
 
 автор: Tegis   (22.07.2009 в 18:18)   письмо автору
 
   для: sim5   (22.07.2009 в 13:51)
 

Вот исходник HTML
<table class="datatable">
<tr><th>Название песни</th><th>песен</th></tr>

<tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"><td><a 
           href="executor.php?id=2">Аблом</a></td><td>0</td></tr><tr onmouseover="this.className='light';" onmouseout="this.className='nolight';"><td><a 
           href="executor.php?id=3">Авиа</a></td><td>0</td></tr> 
</table>


вот CSS
.trcolor {    background-color: #F93;}
  table {margin:0 0px}
  th {background:#006699; color:#fff}
  td, th {padding:5px 10px;}
.trcolor2 {    background-color: #0000FF;}
 .light {
      background-color: #DBDBDB;
  }
  .nolight {
      background-color: White; }


Вот php
<?php  
while($myrow2 mysql_fetch_assoc($result2)) { 
  
$id $myrow2['id']; 
  
$result3 mysql_query("SELECT id FROM akkt WHERE executor=$id",$db); 
  
$num mysql_num_rows($result3); 
  
printf('<tr onmouseover="this.className=\'light\';" onmouseout="this.className=\'nolight\';"><td><a 
           href="executor.php?id=%s">%s</a></td><td>%s</td></tr>'
$myrow2['id'],$myrow2['name'],$num); 
}
?> 

Ну а вот скрины

При загрузке страницы
[img=http://img11.imageshack.us/img11/3783/59808643.th.jpg]

При наведение на 1ю строчку
[img=http://img190.imageshack.us/img190/4696/000wlk.th.jpg]
Первая становится белой и так остаётся
Далее навожу на вторую
[img=http://img32.imageshack.us/img32/450/0000glv.th.jpg]
Ну и в конце концов обе белые
[img=http://img34.imageshack.us/img34/2335/00000z.th.jpg]


Вот=(

  Ответить  
 
 автор: sim5   (22.07.2009 в 18:26)   письмо автору
 
   для: Tegis   (22.07.2009 в 18:18)
 

А вот. Скажите не работает?
<style>
.trcolor {    background-color: #F93;} //здесь укажите полное значение
  table {margin:0 0px} 
  th {background:#006699; color:#fff} 
  td, th {padding:5px 10px;} 
.trcolor2 {    background-color: #0000FF;} 
 .light { 
      background-color: #DBDBDB; 
  } 
  .nolight { 
      background-color: #FFF; }
</style>

<table class="datatable"> 
 <tr><th>Название песни</th><th>песен</th></tr> 
 <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';">
 <td>
 <a href="executor.php?id=2">Аблом</a></td>
  <td>0</td>
 </tr>
 <tr onmouseover="this.className='light';" onmouseout="this.className='nolight';">
  <td><a href="executor.php?id=3">Авиа</a></td>
  <td>0</td>
 </tr>  
</table>

У вас выход из строки должне возвращать тот цвет (класс), кторым по умалчанию раскрашены эти строки. А у вас при выходе указан белый цвет, так чего же вы хотите?

  Ответить  
 
 автор: Tegis   (22.07.2009 в 18:37)   письмо автору
 
   для: sim5   (22.07.2009 в 18:26)
 

возможно я торможу))) Но у меня же идёт чередование цветов в строчках. То есть получается нужно как то сделать что бы каждой строке вернулся свой первый цвет...

  Ответить  
 
 автор: sim5   (22.07.2009 в 18:39)   письмо автору
 
   для: Tegis   (22.07.2009 в 18:37)
 

Ну вы этот цвет как указываете, через SCC или прописываете в тегах?

  Ответить  
 
 автор: Tegis   (22.07.2009 в 18:45)   письмо автору
 
   для: sim5   (22.07.2009 в 18:39)
 

ну вот всё так как на пред ведущих кодах) B CSS

  Ответить  
 
 автор: sim5   (22.07.2009 в 18:48)   письмо автору
 
   для: Tegis   (22.07.2009 в 18:45)
 

В CSS для каждой строки свой класс? Если так, то по выходу со строки возвращайте ее класс, а не .noligth, как я давал в примере.

  Ответить  
 
 автор: Tegis   (22.07.2009 в 18:50)   письмо автору
 
   для: sim5   (22.07.2009 в 18:48)
 

ну так у меня же цикл идёт))) вот именно что не получится каждому свой вернуть)

  Ответить  
 
 автор: Tegis   (22.07.2009 в 19:02)   письмо автору
 
   для: Tegis   (22.07.2009 в 18:50)
 

можно ли это реализовать на js? Ну или у кого есть подобная таблица хоть на Jquery

  Ответить  
 
 автор: sim5   (22.07.2009 в 19:09)   письмо автору
 
   для: Tegis   (22.07.2009 в 18:50)
 

Значит в цикле вы как-то умудряетесь разные классы строкам из CSS прписать, а вот этот же класс прописать для onmouseout ну прямо таки нельзя?
Из вашего кода, я не вижу, чтобы от строки к строке у вас класс менялся. В том коде, который привели (исходный HTML), что-то и близко не видно прописанных классов. Так как вы "разукрашиваете" свою таблицу? Значит у вас иначе это все, а не так, как вы тут рассказываете.
Можно и на JS, но все равно задействовать придется onmouseout, либо по другому определять объект над которым мыш находится.

  Ответить  
 
 автор: Tegis   (22.07.2009 в 19:12)   письмо автору
 
   для: sim5   (22.07.2009 в 19:09)
 

У меня тут js разукрашивает... Там идёт если чётное один цвет нечётное другой. ВОТ
function fgetAllDataTables()
{
    if (!document.getElementsByTagName) return false;

    var eleTables = document.getElementsByTagName("table");

    for (var i=0; i < eleTables.length; i++)
    {
        if (eleTables[i].className == "datatable")
        {
            fStripes(eleTables[i]);
        }
    }
}

function fStripes(eleTable)
{
    var eleTableRows = eleTable.getElementsByTagName("tr");

    for (var i=1; i < eleTableRows.length; i++)
    {
        eleTableRows[i].className = "trcolor";
        i++;
        eleTableRows[i].className = "trcolor2";
        
    }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(fgetAllDataTables);

  Ответить  
 
 автор: Tegis   (22.07.2009 в 19:29)   письмо автору
 
   для: Tegis   (22.07.2009 в 19:12)
 

Тут знает кто js?) Я просто в js 0 полный(

  Ответить  
 
 автор: sim5   (22.07.2009 в 19:35)   письмо автору
 
   для: Tegis   (22.07.2009 в 19:12)
 

А что вы тогда голову морочите. Цвет тегам TR можно указать на стороне сервера, при формироании таблицы, и там же необходиме действия для мыши.
<table class="datatable"> 
 <tr><th>Название песни</th><th>песен</th></tr> 
 <tr bgcolor="#ffcc99" onmouseover="this.bgColor ='#ff9933'" onmouseout="this.bgColor='#ffcc99'">
 <td>
 <a href="executor.php?id=2">Аблом</a></td>
  <td>0</td>
 </tr>
 <tr bgcolor="#cccc99" onmouseover="this.bgColor ='#ff9933'" onmouseout="this.bgColor ='#cccc99'">
  <td><a href="executor.php?id=3">Авиа</a></td>
  <td>0</td>
 </tr>
 <tr bgcolor="#ffcc99" onmouseover="this.bgColor ='#ff9933'" onmouseout="this.bgColor ='#ffcc99'">
  <td><a href="executor.php?id=3">Авиа</a></td>
  <td>0</td>
 </tr>
 <tr bgcolor="#cccc99" onmouseover="this.bgColor ='#ff9933'" onmouseout="this.bgColor ='#cccc99'">
  <td><a href="executor.php?id=3">Авиа</a></td>
  <td>0</td>
 </tr>  
</table>

  Ответить  
 
 автор: Tegis   (22.07.2009 в 19:45)   письмо автору
 
   для: sim5   (22.07.2009 в 19:35)
 

ну это же уже исходник=))) Сам код выглядит вот как
<table class="datatable">
<tr><th>Название песни</th><th>песен</th></tr>

<?php  
while($myrow2 mysql_fetch_assoc($result2)) { 
  
$id $myrow2['id']; 
  
$result3 mysql_query("SELECT id FROM akkt WHERE executor=$id",$db); 
  
$num mysql_num_rows($result3); 
  
printf('<tr onmouseover="this.className=\'light\';" onmouseout="this.className=\'nolight\';"><td><a 
           href="executor.php?id=%s">%s</a></td><td>%s</td></tr>'
$myrow2['id'],$myrow2['name'],$num); 
}
?> 
</table>

  Ответить  
 
 автор: Tegis   (22.07.2009 в 20:19)   письмо автору
 
   для: Tegis   (22.07.2009 в 19:45)
 

аууу)

  Ответить  
 
 автор: sim5   (22.07.2009 в 20:31)   письмо автору
 
   для: Tegis   (22.07.2009 в 19:45)
 

Ну это же не догма, кто программист своего кода вы или за вас кошка делает? )

<?
//до цикла объявляете переменную, по четности которой, 
//будет узнавать какой класс (или цвет) указывать строке
$color 0;
while(
$myrow2 mysql_fetch_assoc($result2)) {  
  
$id $myrow2['id'];  
  
$result3 mysql_query("SELECT id FROM akkt WHERE executor=$id",$db);  
  
$num mysql_num_rows($result3); 
  
$class_over = !($color 1) ? "over_1" "over_2";
  
$class_out = !($color 1) ? "out_1" "out_2"
  
printf('<tr onmouseover="this.className=\''.$class_over.'\'" onmouseout="this.className=\''.$class_out.'\'"><td><a  
           href="executor.php?id=%s">%s</a></td><td>%s</td></tr>'
$myrow2['id'],$myrow2['name'],$num); 
  
$color++; 
}
?>

Пропишите в CSS две пары классов этим строкам: over_1, over_2 и out_1, out_2. Имена конечно можете выбрать свои, какие вам заблагорассудится.

  Ответить  
 
 автор: Tegis   (22.07.2009 в 20:37)   письмо автору
 
   для: sim5   (22.07.2009 в 20:31)
 

Огромное спасибо sim5. Респект тебе))

  Ответить  
 
 автор: Жмурик   (22.07.2009 в 21:23)   письмо автору
 
   для: Tegis   (22.07.2009 в 20:37)
 

Анатолий, вы случаем не Михаил? Больно на Мишу похожи

  Ответить  
 
 автор: Tegis   (22.07.2009 в 21:34)   письмо автору
 
   для: Жмурик   (22.07.2009 в 21:23)
 

не понял вашего плоского юмора

  Ответить  
 
 автор: kama   (08.11.2009 в 00:04)
 
   для: Tegis   (22.07.2009 в 21:34)
 

Или я чет не понял. Но все же проще простого, нах эти онмаусовер/аут все же тупо CSS можно сделать.
где стиль для раскраски идет для класса trcolor
следующей строчкой пишем:

table.класс-таблицы tr:hover, table.класс-таблицы tr.trcolor:hover {background:#ccc;}

#ccc - цвет при наведении

  Ответить  
 
 автор: sim5   (08.11.2009 в 08:29)   письмо автору
 
   для: kama   (08.11.2009 в 00:04)
 

Для IE hover только для ссылок hover, а для остального пофиг. Собственно если уж "онмаусовер/аут" то вешать надо обработчик один, и на такблицу, дабы не плодить лишних буковок в таблице, а в обработчике обработать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования