Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.11.2012, 00:22
Аспирант
Отправить личное сообщение для RodgerFox Посмотреть профиль Найти все сообщения от RodgerFox
 
Регистрация: 10.10.2012
Сообщений: 47

Трудная задачка
Доброй ночи, уважаемые пользователи форума. Столкнулся с задачкой, трудной для выполнения мне. Надеюсь она заинтересует тебя, и ты сможешь помочь мне решить её.
Есть список радио кнопок, каждая находится в своем 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 может использовать еще свой уникальный индификатор?

Последний раз редактировалось RodgerFox, 29.11.2012 в 00:25.
Ответить с цитированием
  #2 (permalink)  
Старый 29.11.2012, 03:03
Новичок на форуме
Отправить личное сообщение для hedint Посмотреть профиль Найти все сообщения от hedint
 
Регистрация: 05.11.2012
Сообщений: 2

взять родительский элемент article и выполнять действия относительно него?
var parent = $(this).closest('article');
$('li',parent).removeClass...
Ответить с цитированием
  #3 (permalink)  
Старый 29.11.2012, 08:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от RodgerFox
Есть список радио кнопок, каждая находится в своем li, при нажатии на другой инпут или лабел класс меняется на активный у li.
Оно?

<!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>
Ответить с цитированием
  #4 (permalink)  
Старый 29.11.2012, 11:56
Аспирант
Отправить личное сообщение для RodgerFox Посмотреть профиль Найти все сообщения от RodgerFox
 
Регистрация: 10.10.2012
Сообщений: 47

ksa, да только как заставить первым элементам в каждом списке быть активными с самого начала, ну типа они уже выбраны (checked)
Ответить с цитированием
  #5 (permalink)  
Старый 29.11.2012, 12:13
Аспирант
Отправить личное сообщение для RodgerFox Посмотреть профиль Найти все сообщения от RodgerFox
 
Регистрация: 10.10.2012
Сообщений: 47

Пробовал дописать, что в начале класс добавляемся инпутам с checked, но как то безрезультатно
Ответить с цитированием
  #6 (permalink)  
Старый 29.11.2012, 13:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от RodgerFox
как заставить первым элементам в каждом списке быть активными с самого начала
Ну косинус же! (с)

<!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>
Ответить с цитированием
  #7 (permalink)  
Старый 29.11.2012, 18:59
Аспирант
Отправить личное сообщение для RodgerFox Посмотреть профиль Найти все сообщения от RodgerFox
 
Регистрация: 10.10.2012
Сообщений: 47

Вау... спасибо вам большое, а можете прокомментировать этот вариант?
$('input[type="radio"]').change(function() {
    $(this).closest('ul').find('li').removeClass('radioOn');
    $(this).parent().addClass('radioOn');
});​
Ответить с цитированием
  #8 (permalink)  
Старый 30.11.2012, 08:47
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от RodgerFox
а можете прокомментировать этот вариант?
closest
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/

Т.ч. все из букваря...
Ответить с цитированием
  #9 (permalink)  
Старый 30.11.2012, 13:24
Аспирант
Отправить личное сообщение для RodgerFox Посмотреть профиль Найти все сообщения от RodgerFox
 
Регистрация: 10.10.2012
Сообщений: 47

Я имею в виду, как вам этот вариант реализации задачи?
Ответить с цитированием
  #10 (permalink)  
Старый 30.11.2012, 13:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от RodgerFox
как вам этот вариант реализации задачи?
Как говорят американцы - есть 100 способов как ободрать кошку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая задачка Nanto Элементы интерфейса 6 08.09.2011 15:19
Задачка по JQuery UI nightkon Элементы интерфейса 2 31.08.2011 19:34
задачка по геометрии js lammeR Общие вопросы Javascript 16 02.02.2011 16:01
Непростая задачка с таблицей GreatRash Элементы интерфейса 0 28.10.2009 14:14
Небольшая задачка Maksim jQuery 4 30.09.2009 19:43