Трудная задачка
Доброй ночи, уважаемые пользователи форума. Столкнулся с задачкой, трудной для выполнения мне. Надеюсь она заинтересует тебя, и ты сможешь помочь мне решить её.
Есть список радио кнопок, каждая находится в своем li, при нажатии на другой инпут или лабел класс меняется на активный у li. Если работать с одним списком <ul><li../><li.../></ul> То все отлично, а как быть если их больше? Подскажите пожалуйста, я сам не смогу додумать. Сам код: $(document).ready(function(){ $('.variants input[type="radio"]').click(function() { console.log('li[for="' + $(this).attr('id') + '"'); $('li').removeClass('radioOn').addClass('radioOff'); $('li[for="' + $(this).attr('id') + '"]').removeClass('radioOff').addClass('radioOn' ) }); $('.variants input[type="radio"]:checked').click(); }); (отлично работает если на странице один список(ul), с множеством вариантов (li) ). Примерный html: <article> <ul> <li for="id_1"><input type="radio" ... /><label .. /></li> <li for="id_2"><input type="radio" ... /><label .. /></li> </ul> </article> <article> <ul> <li for="id_53"><input type="radio" ... /><label .. /></li> <li for="id_54"><input type="radio" ... /><label .. /></li> </ul> </article> <article> <ul> <li for="id_86"><input type="radio" ... /><label .. /></li> <li for="id_87"><input type="radio" ... /><label .. /></li> </ul> </article> p.s. для каждого article может использовать еще свой уникальный индификатор? |
взять родительский элемент article и выполнять действия относительно него? :)
var parent = $(this).closest('article'); $('li',parent).removeClass... |
Цитата:
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <!-- <link rel="stylesheet" type="text/css" href="tmp.css" /> --> <style type="text/css"> .on { color: red; background-color: yellow; } </style> <script type="text/javascript"> $(document).ready(function (){ $(':radio').click(function (){ var o=$(this); $(this).parents('ul').find('.on').removeClass('on'); $(this.parentNode).addClass('on'); }); }); </script> </head> <body> <article> <ul> <li for="id_1"><input type="radio" name='grp1' /><label> .. </label></li> <li for="id_2"><input type="radio" name='grp1' /><label> .. </label></li> </ul> </article> <article> <ul> <li for="id_53"><input type="radio" name='grp2' /><label> .. </label></li> <li for="id_54"><input type="radio" name='grp2' /><label> .. </label></li> </ul> </article> <article> <ul> <li for="id_86"><input type="radio" name='grp3' /><label> .. </label></li> <li for="id_87"><input type="radio" name='grp3' /><label> .. </label></li> </ul> </article> </body> </html> |
ksa, да только как заставить первым элементам в каждом списке быть активными с самого начала, ну типа они уже выбраны (checked)
|
Пробовал дописать, что в начале класс добавляемся инпутам с checked, но как то безрезультатно
|
Цитата:
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <!-- <link rel="stylesheet" type="text/css" href="tmp.css" /> --> <style type="text/css"> .on { color: red; background-color: yellow; } </style> <script type="text/javascript"> $(document).ready(function (){ $(':radio').click(function (){ var o=$(this); $(this).parents('ul').find('.on').removeClass('on'); $(this.parentNode).addClass('on'); }); }); </script> </head> <body> <article> <ul> <li for="id_1" class='on'><input type="radio" name='grp1' checked /><label> .. </label></li> <li for="id_2"><input type="radio" name='grp1' /><label> .. </label></li> </ul> </article> <article> <ul> <li for="id_53" class='on'><input type="radio" name='grp2' checked /><label> .. </label></li> <li for="id_54"><input type="radio" name='grp2' /><label> .. </label></li> </ul> </article> <article> <ul> <li for="id_86" class='on'><input type="radio" name='grp3' checked /><label> .. </label></li> <li for="id_87"><input type="radio" name='grp3' /><label> .. </label></li> </ul> </article> </body> </html> |
Вау... спасибо вам большое, а можете прокомментировать этот вариант?
$('input[type="radio"]').change(function() { $(this).closest('ul').find('li').removeClass('radioOn'); $(this).parent().addClass('radioOn'); }); |
Цитата:
http://jquery-docs.ru/traversing/closest/ find http://jquery-docs.ru/traversing/find/ removeClass http://jquery-docs.ru/attributes/removeclass/ parent http://jquery-docs.ru/traversing/parent/ addClass http://jquery-docs.ru/attributes/addclass/ Т.ч. все из букваря... |
Я имею в виду, как вам этот вариант реализации задачи?
|
Цитата:
|
Часовой пояс GMT +3, время: 15:47. |