Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как отследить изменение radio? (https://javascript.ru/forum/events/44030-kak-otsledit-izmenenie-radio.html)

housewm 03.01.2014 15:43

http://jsfiddle.net/housewm/vVS7n/ щас должен быть код

danik.js 03.01.2014 17:13

jQuery подключи (там есть выпадающий списочек с либами). Причем старушку версии эдак 1.6, ибо live() устарел и был давно выпилен.

А лучше замени метод $('selector').live('change') на $(document).on('change', 'selector')

danik.js 03.01.2014 17:14

И приучи себя открывать консоль (F12) браузера.

yndx.tavria 03.01.2014 18:30

Кажется, что должно получится как-то так http://jsfiddle.net/tavriaforever/BrRjb/
Рекомендую почитать статью в учебнике про делегирование
http://learn.javascript.ru/event-delegation

TITO 05.01.2014 13:09

Здравствуйте. Прошу прощения у ТС за то, что влез в твой тред, но у меня та же проблема, мне нужно обработать все инпут радио на странице, но проблема в том, что я заранее не знаю сколько их будет, страница формируется не моими скриптами.
Пока решил проблему так
$(document).ready(function(){
	$(\'input:radio[name=jshop_attr_id11]\').change(function(){
			u=1;					
	});
});
$(document).ready(function(){
	$(\'input:radio[id=jshop_attr_id12]\').change(function(){
			u=2;					
	});
});
$(document).ready(function(){
	$(\'input:radio[id=jshop_attr_id15]\').change(function(){
			u=3;					
        });
});


Но это костыль, так как в данном случае удается обрабатывать только определенное количество инпутов, а как быть если на другой стрнице их будет 2 или 5. По name почему то вообще не работает, хотя имена у всех радио в моем случае одинаковы и формируются по аналогии с ид. Вот пример html кода который я хотел бы обработать.
<span id='block_attr_sel_1'>
<span class="input_type_radio">
<input type="radio" name="jshop_attr_id[1]" id="jshop_attr_id11" value="1" checked="checked" onclick="setAttrValue('1', this.value);"> 
<label for="jshop_attr_id11"><span class='radio_attr_label'>22</span></label></span>

<span class="input_type_radio">
<input type="radio" name="jshop_attr_id[1]" id="jshop_attr_id12" value="2" onclick="setAttrValue('1', this.value);">
<label for="jshop_attr_id12"><span class='radio_attr_label'>33</span></label></span>

<span class="input_type_radio">
<input type="radio" name="jshop_attr_id[1]" id="jshop_attr_id15" value="5" onclick="setAttrValue('1', this.value);"> 
<label for="jshop_attr_id15"><span class='radio_attr_label'>44</span></label></span>

<span class="input_type_radio">
<input type="radio" name="jshop_attr_id[1]" id="jshop_attr_id16" value="6" onclick="setAttrValue('1', this.value);"> 
<label for="jshop_attr_id16"><span class='radio_attr_label'>55</span></label></span>

Прошу помочь мне оформить приведенный мной код в функцию которая обрабатывала бы все инпут радио на странице я вижу решение что нужно по именам ее обработать, но как не пойму.
Забыл добавить, я из php могу вытащить все id и name у радиокнопок и подставить их в js, но все равно как то не пойму как организовать перебор именно функцией которая принимала бы ид кнопки и изменяла переменную внутри себя на заданное значение, так как писать 50 функций на каждую кнопку это не вариант и говнокод.

danik.js 05.01.2014 13:37

$('input[name="jshop_attr_id[1]"]')

Или, если они все в одной форме, то проще:
$('form input[type="checkbox"]')

Deff 06.01.2014 00:44

<script type="text/javascript">
$('input[name^="jshop_attr_id"]:radio').change(function(){
  alert(this.id)
  alert($(this).next('label').text())
});
</script>

Vlasenko Fedor 06.01.2014 01:55

$('#block_attr_sel_1').on('change', 'input', function () {
        alert(this.value);
});

JoomShoping - ненавижу

yndx.tavria 06.01.2014 13:04

Тогда уже так, отфильтровать селектор по имени инпутов
$('#block_attr_sel_1').on('change', 'input[name^=jshop_attr_id]:radio', function () {
        alert(this.value);
});

Vlasenko Fedor 06.01.2014 13:40

yndx.tavria,
вы знаете JoomShoping?
это вывод одного атрибута, все input внутри '#block_attr_sel_1' будут иметь одинаковое имя и тип. Фильтрация здесь лишняя


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