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

HTML+CSS+JavaScript

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

 

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

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

тема: скрыть несколько строк в таблице по select (фильтр)
 
 автор: P@Sol   (29.08.2012 в 10:57)   письмо автору
 
 

есть таблица

---------------------
| Название | Мера |
---------------------
| Молоко | пакет   |
| Молоко | бутылка |
| Квас   | бутылка |


1. можно по select скрыть несколько строк? т.е. выбираю Молоко и остается две строке с молоком, выбираю Квас, остается только одна строка

2. Можно ли сделать фильтр по двум select? выбираю Молоко + бутылка - остается одна строка

есть код, соответственно он сейчас не работает
<?
<SCRIPT LANGUAGE="JavaScript">
<!--     
function 
Display_input(which) {
    if (
which=="moloko") { moloko1.style.display="block"kv.style.display="none";}
    if (
which=="kv") {kv.style.display="block"moloko1.style.display="none";}

}
//-->
</script>
<select onChange="Display_input(this.options[this.selectedIndex].value)">
        <option value="0"></option>
        <option value="moloko">Молоко</option>
        <option value="kv">Квас</option>
       </select>

<table border=1>
 <tr id="moloko1"  style="display:block">
  <td>Молоко
  <td>пакет
 </tr>
 <tr id="moloko2" style="display:block">
  <td>Молоко
  <td>бутылка
 </tr>
 <tr id="kv"  style="display:block">
  <td>Квас
  <td>бутылка
 </tr>
</table>

  Ответить  
 
 автор: P@Sol   (29.08.2012 в 11:09)   письмо автору
 
   для: P@Sol   (29.08.2012 в 10:57)
 

>1. можно по select скрыть несколько строк? т.е. выбираю Молоко и остается две строке с молоком, выбираю Квас, остается только одна строка
>

читаю http://softtime.ru/forum/read.php?id_forum=4&id_theme=86589

  Ответить  
 
 автор: confirm   (29.08.2012 в 12:06)   письмо автору
 
   для: P@Sol   (29.08.2012 в 11:09)
 

Замечание:
kv.style.display="block"; moloko1.style.display="none";
В данном контексте, kv и moloko1 это просто строки, а не объекты.
В данном случае нужно обращаться к объекту
document.getElementById(which).style.display="";
Именно так: display="", а не display="none" и скрывайте строки.

  Ответить  
 
 автор: P@Sol   (29.08.2012 в 12:23)   письмо автору
 
   для: P@Sol   (29.08.2012 в 11:09)
 

вот такая функция получилась:
<?
function Display_input(which) {

var 
document.getElementById("tabl");

for (var 
0<t.rows.lengthi++) {  

    if ( 
t.rows[i].cells[0].innerHTML != which.replace(/^\s+|\s+$|\r\n/g,""))  
        
t.rows[i].style.display="none";
    else 
t.rows[i].style.display="block";

 }
}


вопрос 2 пока открыт.

  Ответить  
 
 автор: P@Sol   (29.08.2012 в 13:56)   письмо автору
 
   для: P@Sol   (29.08.2012 в 12:23)
 

итоговая функция, которая учитывает два select

<?
function Display_input(whichwhich2) {

var 
document.getElementById("tabl");

for (var 
0<t.rows.lengthi++) {  
    var 
s1 0;
    var 
s2 0;


    if (
which == 0s1 0;
    else if (
t.rows[i].cells[0].innerHTML != which.replace(/^\s+|\s+$|\r\n/g,"")) s1=1;
    if (
which2 == 0s2 0;
    else if ( 
t.rows[i].cells[1].innerHTML != which2.replace(/^\s+|\s+$|\r\n/g,"")) s2=1;

    if ( 
s1 == && s2 == 0t.rows[i].style.display="";
       else 
t.rows[i].style.display="none";

 }
}
...
<
select id="filter1">
        <
option value="0"></option>
        <
option value="Молоко">Молоко</option>
        <
option value="Квас">Квас</option>
       </
select>

<
select id="filter2">
        <
option value="0"></option>
        <
option value="пакет">пакет</option>
        <
option value="бутылка">бутылка</option>
       </
select>

<
input onclick="Display_input(filter1.value,filter2.value)" type="button" value="Фильтровать" />  
<
input onclick="Display_input(0,0);" type="button" value="Сбросить" /></


правда не уверен, что это самый короткий способ

  Ответить  
 
 автор: P@Sol   (29.08.2012 в 14:01)   письмо автору
 
   для: P@Sol   (29.08.2012 в 13:56)
 

немножко оптимизировал:
<?
    
if (which != && t.rows[i].cells[0].innerHTML != which.replace(/^\s+|\s+$|\r\n/g,"")) s1=1;
    if (
which2 != && t.rows[i].cells[1].innerHTML != which2.replace(/^\s+|\s+$|\r\n/g,"")) s2=1;

  Ответить  
 
 автор: confirm   (29.08.2012 в 11:12)   письмо автору
 
   для: P@Sol   (29.08.2012 в 10:57)
 

Список с единственным выбором, всегда возвращает значение выбранной опции, то есть писать:
onChange="Display_input(this.options[this.selectedIndex].value)
нет смысла, достаточно:
onChange="Display_input(this.value)

Чтобы скрывать несколько, нужно разрешить в списке выбор нескольких опций:
<select multiple ....>
и по событию onChange в цикле проверять выбранные опции.

  Ответить  
 
 автор: ЯСА   (29.08.2012 в 11:54)   письмо автору
 
   для: confirm   (29.08.2012 в 11:12)
 

>>>Чтобы скрывать несколько, нужно разрешить в списке выбор нескольких опций:
<select multiple ....>


В данном конкретном случае - совсем не обязательно.
Выбрал "Молоко" - строка с ним скрылась. Действие завершено.
Выбрал "Квас" - и эта строка скрылась. Независимо от первого действия.

  Ответить  
 
 автор: confirm   (29.08.2012 в 11:57)   письмо автору
 
   для: ЯСА   (29.08.2012 в 11:54)
 

Можно, конечно, если "скрыть несколько" рассматривать как последовательность нескольких действий, но автору хочется видимо не это.

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

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