Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Выбор всех Select (https://javascript.ru/forum/dom-window/32680-vybor-vsekh-select.html)

kvaleksandr 25.10.2012 13:59

Выбор всех Select
 
Здравствуйте, подскажите как можно перебрать все селекты по очереди и взять из них активное значение.

div id="option-228" - этот и подобные изначально неизвестны
id у select - изначально неизвестно
name у select - изначально неизвестно

<form id="new" action="">
        <div id="option-228" class="option">
        <span class="required">*</span>
          <select class="sel_opt" id="228" name="option[228]">
            <option value=""> первый </option>
            <option value="19">второй</option>
        </select>
        </div>
		
        <br>
		<div id="option-217" class="option">
                    <span class="required">*</span>
                    <b>Select:</b><br>
          <select class="sel_opt" id="217" name="option[217]">
            <option value=""> Blue </option>
            <option value="4">Red </option>
            <option value="3">Green</option>
          </select>
        </div>
		
        <br>
         <div id="option-227" class="option">
                    <span class="required">*</span>
                    <b>Select:</b><br>
          <select class="sel_opt" id="227" name="option[227]">
            <option value="">Выбор 1</option>
            <option value="17">Выбор 2</option>
            <option value="18">Выбор 3</option>
         </select>		 
        </div>

</form>

lord2kim 25.10.2012 14:18

kvaleksandr,
var sel = document.getElementById("new").getElementsByTagName("select"), sel_leng = sel.length, mas_sel = [];
for (i=0; i < sel_leng; i++) {
    mas_sel.push(sel[i].value);
}

или можно по классу...

kvaleksandr 26.10.2012 05:57

Пробую
$('select.sel_opt').bind('change', function() {

	var sel = document.getElementById("new").getElementsByTagName("select"), sel_leng = sel.length, mas_sel = [];

for (i=0; i < sel_leng; i++) {

    mas_sel.push(sel[i].value);

}
	alert(sel);
$('#new_price').text(sel);
});


через alert выдается такое вот, может я чего неправильно делаю? ощущение что в sel передается массив, только вот как его потом оттуда извлечь?


Your 26.10.2012 06:52

У вас же кнопка отправить будет, зачем вы постоянно обращаетесь к заполнению массива, жесть.

Когда можно при отправки заполнить массив, проверив, что выбрана не пустота и радоваться.

kvaleksandr 26.10.2012 09:33

Цитата:

Сообщение от Your (Сообщение 212373)
У вас же кнопка отправить будет, зачем вы постоянно обращаетесь к заполнению массива, жесть.

Когда можно при отправки заполнить массив, проверив, что выбрана не пустота и радоваться.

при обработке селектов в

$('#new_price').text(sel);


должен помещаться результат обработки всех селектов.

Суть задачи такая. есть изначально неизвестное количество селектов, в каждом селекте хранится параметр с цифрой. Мне необходимо суммировать все селекты и вывести в отдельный див.

lord2kim 26.10.2012 09:49

kvaleksandr, вы скажите почему выводите sel, а не mas_sel ? для чего по вашему в цикле массив собирается?)

kvaleksandr 26.10.2012 12:26

Цитата:

Сообщение от lord2kim (Сообщение 212388)
kvaleksandr, вы скажите почему выводите sel, а не mas_sel ? для чего по вашему в цикле массив собирается?)

спасибо за подсказку, очень давно с кодом дел не имел).

kvaleksandr 26.10.2012 14:52

Когда пытаюсь вытащить value из вашего примера, то все работает на отлично, но как пытаюсь вытащить текст, то значения выходят пустые.

var sel = document.getElementById("new").getElementsByTagName("select"), sel_leng = sel.length, mas_sel = [];

for (i=0; i < sel_leng; i++) {

    mas_sel.push(sel[i].Text);

}


перепробовал несколько вариантов, но значения кроме как из value прочитать не удается(

lord2kim 26.10.2012 14:57

kvaleksandr, если память не изменяет, то не Text, а text

kvaleksandr 26.10.2012 16:05

Цитата:

Сообщение от lord2kim (Сообщение 212440)
kvaleksandr, если память не изменяет, то не Text, а text

да я уже и text и text() и всяко пробовал, пробовал даже в селект засовывать title и оттуда попытаться взять значения, но безрезультатно(

lord2kim 26.10.2012 17:19

kvaleksandr,
mas_sel.push(sel[i].options[sel[i].selectedIndex].text);

kvaleksandr 27.10.2012 06:57

Цитата:

Сообщение от lord2kim (Сообщение 212475)
kvaleksandr,
mas_sel.push(sel[i].options[sel[i].selectedIndex].text);

Огромное спасибо, как раз подошло.

bes 27.10.2012 20:55

<head>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
jQuery(function ($) {
	$('form#new').bind('change', function () {
		var els = $('form#new option:selected');
		alert(els.text());
		alert(els[2].textContent + '; ' + els[2].value);
	});
});
</script>
</head>

<form id="new" action="">
        <div id="option-228" class="option">
        <span class="required">*</span>
          <select class="sel_opt" id="228" name="option[228]">
            <option value=""> первый </option>
            <option value="19">второй</option>
        </select>
        </div>
		
        <br>
		<div id="option-217" class="option">
                    <span class="required">*</span>
                    <b>Select:</b><br>
          <select class="sel_opt" id="217" name="option[217]">
            <option value=""> Blue </option>
            <option value="4">Red </option>
            <option value="3">Green</option>
          </select>
        </div>
		
        <br>
         <div id="option-227" class="option">
                    <span class="required">*</span>
                    <b>Select:</b><br>
          <select class="sel_opt" id="227" name="option[227]">
            <option value="">Выбор 1</option>
            <option value="17">Выбор 2</option>
            <option value="18">Выбор 3</option>
         </select>		 
        </div>

</form>


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