Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Выборка чекбоксов и из значений (https://javascript.ru/forum/jquery/42340-vyborka-chekboksov-i-iz-znachenijj.html)

prudcky 22.10.2013 19:12

Выборка чекбоксов и из значений
 
Здравствуйте. Не могу разобраться в чем дело (

есть вот такой html
<input type="checkbox" value="1000" /> 
<input type="checkbox" value="2000" /> 
<input type="checkbox" value="3000" />


и есть вот такой код js (здесь использовано jQuery)
var checkbox = $('input[type=checkbox]:checked'); 
  for(i=0; i<checkbox.length; i++){
   var x = checkbox[i].val();
   alert(x);
  }


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

Ведь вроде все и правильно, как я знаю в переменой checkbox должен быть массив а если это массив то и доступ должен быть к нему типа array[0]. Цикл работает если убрать
var x = checkbox[i].val();
, значит наверно именно там и ошибка, но вот где понять ну никак не могу.


ПОМОГИТЕ, ПОЖАЛУЙСТА !!! )

danik.js 22.10.2013 19:20

<input type="checkbox" value="1000" checked="" />
<input type="checkbox" value="2000" />
<input type="checkbox" value="3000" checked />
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
var checkboxes = $('input[type=checkbox]:checked');
for (var i=0; i < checkboxes.length; i++){
   var x = checkboxes[i].value;
   alert(x);
}
</script>


Пояснения:
1) функция $() возвращает объект, похожий на массив (можно обращаться по числовым ключам, и имеется свойство length, указывающее количество элементов). Сам объект имеет интересные методы вроде val(), html(), hide() и прочие (смотри api.jquery.com). Сами элементы "массива" - это голые DOM-элементы, не имеющие этих свойств.
2) Перед i забыл ключевое слово var, но это не критично
3) Коллекции должны быть именованы множественным числом (это касается стиля именования и не влияет конечно же на результат).


Ну и на последок, jquery-way:

var $checkboxes = $('input[type=checkbox]:checked');
$checkboxes.each(function(){
    var x = this.value;
    alert(x);
});

рони 22.10.2013 21:09

Цитата:

Сообщение от prudcky
var x = checkbox[i].val();

вариант...
<input type="checkbox" value="1000" checked="" />
<input type="checkbox" value="2000" />
<input type="checkbox" value="3000" checked />
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
var checkboxes = $('input[type=checkbox]:checked');
for (var i=0; i < checkboxes.length; i++){
   var x = checkboxes.eq(i).val();
   alert(x);
}
</script>

prudcky 23.10.2013 00:13

Спасибо Рони, работает как и хотел только вот так и не понял что это за eq(i) ?

prudcky 23.10.2013 00:16

Цитата:

Сообщение от danik.js (Сообщение 277659)
<input type="checkbox" value="1000" checked="" />
<input type="checkbox" value="2000" />
<input type="checkbox" value="3000" checked />
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
var checkboxes = $('input[type=checkbox]:checked');
for (var i=0; i < checkboxes.length; i++){
   var x = checkboxes[i].value;
   alert(x);
}
</script>


Пояснения:
1) функция $() возвращает объект, похожий на массив (можно обращаться по числовым ключам, и имеется свойство length, указывающее количество элементов). Сам объект имеет интересные методы вроде val(), html(), hide() и прочие (смотри api.jquery.com). Сами элементы "массива" - это голые DOM-элементы, не имеющие этих свойств.
2) Перед i забыл ключевое слово var, но это не критично
3) Коллекции должны быть именованы множественным числом (это касается стиля именования и не влияет конечно же на результат).


Ну и на последок, jquery-way:

var $checkboxes = $('input[type=checkbox]:checked');
$checkboxes.each(function(){
    var x = this.value;
    alert(x);
});

Кстати, Даник - как я знаю то в цикле for в переменой "i" ключевое слово "var" указывать не нужно так как это особенность данного цикла )

рони 23.10.2013 00:40

Цитата:

Сообщение от prudcky
что это за eq(i) ?

Цитата:

Возвращает элемент, идущий под заданным номером в наборе выбранных элементов. Метод имеет один вариант использования:

.eq(index):
:write:

danik.js 23.10.2013 04:46

Цитата:

Сообщение от prudcky
Кстати, Даник - как я знаю то в цикле for в переменой "i" ключевое слово "var" указывать не нужно так как это особенность данного цикла )

Кто тебе такую глупость сказал? В Strict-режиме объявление переменных без var выдает ошибку, вот и проверим:
(function(){
"use strict";
for (i = 0;0;);
})();


(function(){
for (var i = 0;0;);
})();


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