Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2016, 17:08
Новичок на форуме
Отправить личное сообщение для Sapta Посмотреть профиль Найти все сообщения от Sapta
 
Регистрация: 24.02.2016
Сообщений: 4

Связанные селекты
Есть 2 селекта.
<select id="select1" name="select_1">
<option value="">Осуществите выбор</option>
<option value="2">Пункт 1</option>
<option value="50">Подпункт 1.1</option>
<option value="51">Подпункт 1.2</option>
<option value="3">Пункт 2</option>
<option value="52">Подпункт 2.1</option>
<option value="53"Подпункт 2.2</option>
<option value="4">Пункт 3</option>
<option value="54">Подпункт 3.1</option>
<option value="55">Подпункт 3.2</option>

<select id="select2" name="select_2">
<option value="">Осуществите выбор</option>
<option value="Пункт 1">Пункт 1</option>
<option value="Пункт 2">Пункт 2</option>
<option value="Пункт 3">Пункт 3</option>

Нужно их связать так, чтобы при выборе из второго селекта автоматически выбирался соответствующий пункт первого селекта (в идеале вообще чтобы сразу первый дочерний подпункт выбирал, но не всё сразу...).
Т.е. во втором селекте выбираем "Пункт 1". В результате чего в первом селекте автоматически выбирается "Пункт 1".
В познаниях js не силён. Наверное, ошибка простая...

До какого "творчества" дошёл:
var first = document.getElementById("select1"),
second = document.getElementById("select2");

second.onchange = function() {

 var number = second.selectedIndex,
 name = second.options[number].value;

 for (var i = 0; i < first.length; i++){
   if (first.options[i].text == name){
      first.options[i].selected = true;
   } 
 }
};

Скрипт спотыкается на цикле. Не происходит перебора значений.
Спасибо за внимание.
Ответить с цитированием
  #2 (permalink)  
Старый 24.02.2016, 17:39
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

Sapta,
<!DOCTYPE html>
<html lang="en">
<head>
	<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<select id="select1" name="select_1">
<option value="">Осуществите выбор</option>
<option value="2">Пункт 1</option>
<option value="50">Подпункт 1.1</option>
<option value="51">Подпункт 1.2</option>
<option value="3">Пункт 2</option>
<option value="52">Подпункт 2.1</option>
<option value="53">Подпункт 2.2</option>
<option value="4">Пункт 3</option>
<option value="54">Подпункт 3.1</option>
<option value="55">Подпункт 3.2</option>
</select>

<select id="select2" name="select_2" onchange="same()">
<option value="">Осуществите выбор</option>
<option value="Пункт 1">Пункт 1</option>
<option value="Пункт 2">Пункт 2</option>
<option value="Пункт 3">Пункт 3</option>
</select>
<div id="ggg"></div>
</body>
</html>
<script>
 	function same(){ 
 		var choosen = event.target.value;	
 		if (choosen == "Пункт 1"){
 			$('#select1').val(2);
 		} else if (choosen == "Пункт 2"){
 			$('#select1').val(3);
 		} else if (choosen == "Пункт 3"){
 			$('#select1').val(4);
		}
	}
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 24.02.2016, 18:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Sapta,
проще select_1 создавать согласно выбору в select_2
Ответить с цитированием
  #4 (permalink)  
Старый 25.02.2016, 09:29
Новичок на форуме
Отправить личное сообщение для Sapta Посмотреть профиль Найти все сообщения от Sapta
 
Регистрация: 24.02.2016
Сообщений: 4

AciDWarrioR, спасибо. Возможен ли вариант без перебора через if? По аналогии с тем, какой пример я привёл. Т.к. в оригинале позиций в селектах много.

Сообщение от рони Посмотреть сообщение
Sapta,
проще select_1 создавать согласно выбору в select_2
В текущих условиях не подходит, т.к. исходные селекты менять никак не следует.
Ответить с цитированием
  #5 (permalink)  
Старый 25.02.2016, 09:34
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

Sapta,
Так можно выбрать любой. Вот как вариант я думаю можно было бы сделать так, но придется value переделать в первом селекте:
<!DOCTYPE html>
<html lang="en">
<head>
	<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<select id="select1" name="select_1">
<option value="">Осуществите выбор</option>
<option value="Пункт 1">Пункт 1</option>
<option value="50">Подпункт 1.1</option>
<option value="51">Подпункт 1.2</option>
<option value="Пункт 2">Пункт 2</option>
<option value="52">Подпункт 2.1</option>
<option value="53">Подпункт 2.2</option>
<option value="Пункт 3">Пункт 3</option>
<option value="54">Подпункт 3.1</option>
<option value="55">Подпункт 3.2</option>
</select>

<select id="select2" name="select_2" onchange="same()">
<option value="">Осуществите выбор</option>
<option value="Пункт 1">Пункт 1</option>
<option value="Пункт 2">Пункт 2</option>
<option value="Пункт 3">Пункт 3</option>
</select>
<div id="ggg"></div>
</body>
</html>
<script>
 	function same(){ 
 		var choosen = event.target.value;	
 		$('#select1').val(choosen);
	}
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 25.02.2016, 09:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Sapta,
а какой смысл держать все option в select_1 если нужны только 2
Ответить с цитированием
  #7 (permalink)  
Старый 25.02.2016, 09:55
Новичок на форуме
Отправить личное сообщение для Sapta Посмотреть профиль Найти все сообщения от Sapta
 
Регистрация: 24.02.2016
Сообщений: 4

Сообщение от AciDWarrioR Посмотреть сообщение
Sapta,
Так можно выбрать любой. Вот как вариант я думаю можно было бы сделать так, но придется value переделать в первом селекте...
В том-то и дело, что менять исходные селекты нельзя.

Сообщение от рони Посмотреть сообщение
Sapta,
а какой смысл держать все option в select_1 если нужны только 2
Например, обычные пользователи имеют доступ только к select2. При выборе Пункта 1 в select1 автоматически произведётся выбор Пункта 1 (а лучше сразу Подпункта 1.1). А вот уже модератор имеет доступ к select1 и может сам назначить Подпункт 1.2 для конкретного случая.
Ответить с цитированием
  #8 (permalink)  
Старый 25.02.2016, 09:57
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Сообщение от Sapta Посмотреть сообщение
В текущих условиях не подходит, т.к. исходные селекты менять никак не следует.
<script>
    document.addEventListener('DOMContentLoaded', function () {
        document.querySelector('#select2').addEventListener('change', function () {
            var val = this.value, sel1 = document.querySelector('#select1'),
                pattern = new RegExp(val);
            [].some.call(sel1, function (el, i) {
                if (pattern.test(el.innerHTML)) {
                    sel1.selectedIndex = i;
                    return true;
                }
            })
        })
    })
</script>
    <select id="select1" name="select_1">
        <option value="">Осуществите выбор</option>
        <option value="2">Пункт 1</option>
        <option value="50">Подпункт 1.1</option>
        <option value="51">Подпункт 1.2</option>
        <option value="3">Пункт 2</option>
        <option value="52">Подпункт 2.1</option>
        <option value="53">Подпункт 2.2</option>
        <option value="4">Пункт 3</option>
        <option value="54">Подпункт 3.1</option>
        <option value="55">Подпункт 3.2</option>
    </select>

        <select id="select2" name="select_2">
            <option value="">Осуществите выбор</option>
            <option value="Пункт 1">Пункт 1</option>
            <option value="Пункт 2">Пункт 2</option>
            <option value="Пункт 3">Пункт 3</option>
        </select>
Ответить с цитированием
  #9 (permalink)  
Старый 25.02.2016, 10:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Sapta,
спасибо, ну раз вам так нужно ... но хоть десять подпунктов ... нафига остальные Подпункт 2.1 и прочие если выбран Пункт 1
Ответить с цитированием
  #10 (permalink)  
Старый 26.02.2016, 08:53
Новичок на форуме
Отправить личное сообщение для Sapta Посмотреть профиль Найти все сообщения от Sapta
 
Регистрация: 24.02.2016
Сообщений: 4

Спасибо за качественные советы!
Проблема также заключалась в моей ошибке, возникшей в работе с данными изначальных селектов.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимосвязанные селекты с выбором серии и языка Антоха Общие вопросы Javascript 5 30.09.2015 01:42
Как получить связанные данные из модели? Infarch ExtJS 1 24.10.2014 16:40
Связанные SELECT + подгрузка AJAX kapustnik Элементы интерфейса 1 24.07.2013 20:22
Динамические селекты Stud Элементы интерфейса 2 13.09.2011 18:14
связанные селекты AlexJ AJAX и COMET 4 02.06.2009 10:28