Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Скрыть/показать элементы в зависимости от значения select ов (нескольких) (https://javascript.ru/forum/dom-window/41241-skryt-pokazat-ehlementy-v-zavisimosti-ot-znacheniya-select-ov-neskolkikh.html)

Georka 05.09.2013 14:20

Скрыть/показать элементы в зависимости от значения select ов (нескольких)
 
Необходимо разместить на HTML сайте 2 и более фильтров по которым будет фильтроваться содержимое. Но только с помощью js.

Я мудрил и вот что вышло:
Код:

<!DOCTYPE html>

<head>
<script>function Selected(a) {
 var label = a.value;
 if (label==1) {
  document.getElementById("Label1").style.display='block';
  document.getElementById("Label2").style.display='none';
  document.getElementById("Label3").style.display='none';
  } else if (label==2) {
  document.getElementById("Label1").style.display='none';
  document.getElementById("Label2").style.display='block';
  document.getElementById("Label3").style.display='none';
  } else if (label==3) {
  document.getElementById("Label1").style.display='none';
  document.getElementById("Label2").style.display='none';
  document.getElementById("Label3").style.display='block';
  } else {
  document.getElementById("Label1").style.display='none';
  document.getElementById("Label2").style.display='none';
  document.getElementById("Label3").style.display='none';
  }
  }</script>
</head>

<body>
<span style="font-size: 12pt;">Выберите категорию:</span>
<select id="first" class="Validate_Required " name="Dest" aria-required="true" onChange="Selected(this)">
 <option value="0" selected disabled>Не выбрано</option>
 <option value="1">Авто\Мото</option>
 <option value="2">Компьютеры</option>
 <option value="3">Знакомство</option>
</select>
&nbsp;
&nbsp;
&nbsp;
<span style="font-size: 12pt;">Выберите раздел:</span>
<select id="second" class="Validate_Required " name="Dest" aria-required="true" onChange="Selected(this)">
 <option value="0" selected disabled>Не выбрано</option>
 <option value="3">Дружба\Любовь</option>
 <option value="1">BMW X5</option>
 <option value="2">Microsoft</option>
</select>
<br><hr>
<div id='Label1' style='display: none;'>BMW X5</div>
<div id='Label2' style='display: none;'>Jaguar F5</div>
<div id='Label3' style='display: none;'>Lamborgini Italian</div>

</body>

</html>

Нужно чтобы во втором фильтре отображались разделы, относящиеся к выбранной категориии в фильтре №1.

BETEPAH 05.09.2013 15:09

<!DOCTYPE html>
<html>
<head>
<style>
select, div {
display: inline-block;
}
</style>
</head>
<body>
<select id="first">
 <option value="0" selected disabled>Не выбрано</option>
 <option value="1">Авто\Мото</option>
 <option value="2">Компьютеры</option>
 <option value="3">Знакомство</option>
</select>
<div id="second"></div>
<script>
var autos = 'BMW X5, Jaguar F5, Lamborgini Italian'.split(', ');
var computers = 'Windows, Mac, Linux'.split(', ');
var connexions = 'Love, Meeting, Sex'.split(', ');
document.getElementById('first').onchange = function(){
    var str = '';
    if (this.value == 1) {
        for (var i = 0; i < autos.length; i++) {
            str += '<option value="i">' + autos[i];    
        }
    } else if (this.value == 2) {
        for (var i = 0; i < computers.length; i++) {
            str += '<option value="i">' + computers[i];    
        }
    } else if (this.value == 3) {
        for (var i = 0; i < connexions.length; i++) {
            str += '<option value="i">' + connexions[i];    
        }
    } else return false;
    document.getElementById('second').innerHTML = '<select>' + str + '</select>';
}
</script>
</body> 
</html>

рони 05.09.2013 15:32

:write:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
#second {
display:   none;
}
</style>
</head>
<body>
<select id="first">
 <option value="0" selected >Не выбрано</option>
 <option value="1">Авто\Мото</option>
 <option value="2">Компьютеры</option>
 <option value="3">Знакомство</option>
</select>
<select id="second"></select>
<script>
var autos = 'BMW X5, Jaguar F5, Lamborgini Italian'.split(', ');
var computers = 'Windows, Mac, Linux'.split(', ');
var connexions = 'Love, Meeting, Sex'.split(', ');
var two = [autos,computers,connexions]
document.getElementById('first').onchange = function(){
    var select =  document.getElementById('second'),
    j = this.value;
    select.style.display = "none";
    select.options.length = 0;
    if (j) {
         var options = two[--j];
    for (var i = 0; i < options.length; i++) {
           select.options[i] = new Option(options[i], i); ;
        }
    select.style.display = "inline-block";
    }
}
</script>
</body>
</html>

Georka 05.09.2013 20:51

СПАСИБо =) добрые люди :) А как теперь отобразить и прописать содержимое , чтобы при выборе например: BMW X5 - отображался раздел который относиться к разделу BMW X5.

рони 05.09.2013 21:24

Georka,
нужно написать функцию для второго селектора :dance:

BETEPAH 05.09.2013 21:34

Цитата:

Сообщение от Georka
А как теперь отобразить и прописать содержимое , чтобы при выборе например: BMW X5 - отображался раздел который относиться к разделу BMW X5.

Это уже неинтересно. Для второго селекта делаете аналогично onchange-функцию, в которую вставляете показ нужного раздела через display: block или через переход по ссылке.

Georka 05.09.2013 21:52

рони,
:haha:
Ну поогите ) нужно чтобы было так:
выбрал категорию авто, раздел BMW и отображалось содержимое с описанием BMW
Выбрал категорию компьюеры , раздел windows и там содержимое c описанием windows
Плиз хэлп =)

pumaone 05.09.2013 22:36

используй цикл:

<div id='Label1' onclick="updateVis(this.id)">BMW X5</div>
<div id='Label2' onclick="updateVis(this.id)">Jaguar F5</div>
<div id='Label3' onclick="updateVis(this.id)">Lamborgini</div>

<script>
function updateVis(){
switch(id){
case 'Label1':
for (var i = 1; i<4; i++){
document.getElementById('Label' + i).style.display = 'none';
}
document.getElementById("Label1").style.display='b lock';
break;
case 'Label2':
for (var i = 1; i<4; i++){
document.getElementById('Label' + i).style.display = 'none';
}
document.getElementById("Label2").style.display='b lock';
break;
default: for (var i = 1; i<4; i++){
document.getElementById('Label' + i).style.display = 'none';
}
}
</script>

рони 06.09.2013 00:20

Зависимые селекты
 
Цитата:

Сообщение от BETEPAH
Это уже неинтересно.

согласен :victory:
Georka,
:cray: :cray: :cray:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
#second {
display:   none;
}
</style>
</head>
<body>
<select id="first">
 <option value="0" selected >Не выбрано</option>
 <option value="1">Авто\Мото</option>
 <option value="2">Компьютеры</option>
 <option value="3">Знакомство</option>
</select>
<select id="second">
<option value="0" selected >Не выбрано</option>
</select>

<div id='autos1' style='display: none;'>BMW X5</div>
<div id='autos2' style='display: none;'>Jaguar F5</div>
<div id='autos3' style='display: none;'>Lamborgini Italian</div>
<div id='computers1' style='display: none;'>Windows</div>
<div id='computers2' style='display: none;'>Mac</div>
<div id='computers3' style='display: none;'>Linux</div>
<div id='connexions1' style='display: none;'>Love</div>
<div id='connexions2' style='display: none;'>Meeting</div>
<div id='connexions3' style='display: none;'>Sex</div>
<script>
(function ()
{
var autos = 'BMW X5, Jaguar F5, Lamborgini Italian'.split(', ');
var computers = 'Windows, Mac, Linux'.split(', ');
var connexions = 'Love, Meeting, Sex'.split(', ');
var two = [autos,computers,connexions];
var group = 'autos,computers,connexions'.split(',');
var j;
var old;
document.getElementById('first').onchange = function(){
    var select =  document.getElementById('second');
    j = this.value;
    select.style.display = "none";
    old && (old.style.display = "none");
    select.options.length = 1;
    if (j) {
         var options = two[--j];
    for (var i = 1; i <= options.length; i++) {
           select.options[i] = new Option(options[i-1], i); ;
        }
    select.style.display = "inline-block";
    }
}

document.getElementById('second').onchange = function(){
  old && (old.style.display = "none");
  old = document.getElementById(group[j]+this.value);
  old && (old.style.display = "block");
}
})()
</script>
</body>
</html>


Часовой пояс GMT +3, время: 00:07.