Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   <select> установка нескольких селектов в одно значение (https://javascript.ru/forum/misc/12151-select-ustanovka-neskolkikh-selektov-v-odno-znachenie.html)

ky100 03.10.2010 18:26

<select> установка нескольких селектов в одно значение
 
Задача: по выбору selectall установить все селекты cat[] в это же значение.

Вопрос: как реализовать

Сначала получаем в переменную выбраное значение.
Теперь циклом установить все селекты. Но...
Для этого надо знать кол-во элементов cat[] на странице.
document.myForm.cat.length не работает, наверное потому что это массив ))
Помогите разобраться и реализовать )

<script type="text/javascript">

 function select_all(){

	var clv=document.myForm.selectall.value;	
	alert(clv);

}

</script>


<form method="post" name="myForm" action="">

	<select id="selectall" name="selectall" onChange="select_all()">
		<option value='1'>Яблоко</option>
		<option value='2'>Груша</option>
		<option value='3'>Тыква</option>		
	</select><hr />

	<select id="cat[0]">
		<option value='1'>Яблоко</option>
		<option value='2'>Груша</option>
		<option value='3'>Тыква</option>		
	</select><br />

	<select id="cat[1]">
		<option value='1'>Яблоко</option>
		<option value='2'>Груша</option>
		<option value='3'>Тыква</option>		
	</select>


</form>


Заранее благодарен )

Sweet 03.10.2010 19:42

Бред! Это ж просто плод больной фантазии!!! Почему id="cat[0]" должно работать??? Потому что ты так решил?

Sweet 03.10.2010 19:55

<form method="post" name="myForm" action="">
  <select onChange="this.form[1].selectedIndex = this.form[2].selectedIndex = this.selectedIndex;">
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select><hr />
  <select>
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select><br />
  <select>
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select>
</form>

ky100 03.10.2010 20:07

Цитата:

Сообщение от Sweet (Сообщение 72907)
Бред! Это ж просто плод больной фантазии!!! Почему id="cat[0]" должно работать??? Потому что ты так решил?

ну зачем же так жестить то? ))
я и по нормальному понимаю )

это
this.form[1].selectedIndex = this.form[2].selectedIndex = this.selectedIndex;
сработает только в данной упрощённой форме,
а если селектов не 2 а 20?
а если помимо селектов ещё куча элементов?
Потому считаю целесообразным заключить в функцию и вызывать по событию.

из Ваших слов я понял, что некорректно имя id элемента.

И до сих пор не понятно как получить кол-во селектов на странице?

Sweet 03.10.2010 20:47

Я лишь хотел сказать, что нужно изучать, а не гадать на кофейной гуще!
Цитата:

Сообщение от ky100
И до сих пор не понятно как получить кол-во селектов на странице?

getElementsByTagName('select').length

Sweet 03.10.2010 20:54

Цитата:

Сообщение от ky100
сработает только в данной упрощённой форме

Я специально упростил все до минимума, чтобы можно было видеть главное.

Sweet 03.10.2010 21:02

Вот две функции (обе работают:) ). Только func ищет все select'ы, а func_ - только select'ы внутри данной формы.
<form method="post" name="myForm" action="">
  <select onChange="func(this);">
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select><hr />
  <select class="cat">
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select><br />
  <select>
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select><br />
  <select class="cat">
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select>
</form>
<script>
function func(el){ //
  var elements = document.getElementsByTagName('select'), sI = el.selectedIndex;
  for(var i = 0; i < elements.length; i++) if(elements[i].className == 'cat') elements[i].selectedIndex = sI;
}
function func_(el){
  var elements = el.form, length = el.form.length, sI = el.selectedIndex;
  for(var i = 0; i < length; i++) if(elements[i].className == 'cat') elements[i].selectedIndex = sI;
}
</script>

ky100 04.10.2010 02:02

Цитата:

Сообщение от Sweet (Сообщение 72915)
Я лишь хотел сказать, что нужно изучать, а не гадать на кофейной гуще!
getElementsByTagName('select').length

Изучаю )
Хорошо когда есть тот кто объяснит, когда уже не знаешь куда копать )

Цитата:

Сообщение от Sweet (Сообщение 72917)
Вот две функции (обе работают:) ). Только func ищет все select'ы, а func_ - только select'ы внутри данной формы.
<form method="post" name="myForm" action="">
  <select onChange="func(this);">
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select><hr />
  <select class="cat">
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select><br />
  <select>
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select><br />
  <select class="cat">
    <option>Яблоко</option>
    <option>Груша</option>
    <option>Тыква</option>		
  </select>
</form>
<script>
function func(el){ //
  var elements = document.getElementsByTagName('select'), sI = el.selectedIndex;
  for(var i = 0; i < elements.length; i++) if(elements[i].className == 'cat') elements[i].selectedIndex = sI;
}
function func_(el){
  var elements = el.form, length = el.form.length, sI = el.selectedIndex;
  for(var i = 0; i < length; i++) if(elements[i].className == 'cat') elements[i].selectedIndex = sI;
}
</script>

Вот за это огромное спасибище! ))
Собственно решение задачи ) func_ - то что я изначально и хотел )
Теперь я понял как обращаться к элементам и как юзать классы элементов.
Немного унифицировал функцию в доказательство усвоенного :write:
function selectall(el,cl){
	var elements = el.form, length = el.form.length, sI = el.selectedIndex;
	for(var i = 0; i < length; i++){
		if(elements[i].className == cl) elements[i].selectedIndex = sI;
	}	
}


Sweet, большое спасибо )


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