2012-02-10 3 views
2

Я пробовал в течение нескольких часов, чтобы получить решение для следующей проблемы. Я сделал это с довольно сложнымjQuery: hide/show element on radio box change checked & hover

  • Список с выбором радио-коробок с описанием выбранной радиобазы под ним;
  • При наведении курсора мыши на каждый элемент появляется описание в том же положении (все остальные описания исчезают);
  • Когда мышь не наводится на элемент, появится описание, соответствующее проверенному радиооболочке (все остальные описания исчезают);

Я полностью признаю, что мои знания jQuery находятся на минимальном уровне, главным образом потому, что я никогда не должен использовать его сам. Проведя несколько часов в Google, и некоторые озадачивающие меня заставили меня все, кроме рабочего решения для всей проблемы. У меня был рабочий сценарий JS для него некоторое время назад с слишком большим количеством кода, глядя на то, где я сейчас выгляжу, как JQuery может дать мне гораздо более короткий и чистый код.

Сейчас я получил следующий HTML:

<style type="text/css"> 
    .options .active {font-weight: bold;} 
    .descriptions span {display: none;} 
    .descriptions span.active {display: block;}​ 
</style> 

<div class="options"> 
    <label><input name="permForumcon" type="radio" value="10" /> option1</label> 
    <label><input name="permForumcon" type="radio" value="50" />option2</label> 
    <label><input name="permForumcon" type="radio" value="70" /> option3</label> 
</div> 

<div class="descriptions"> 
    <span>description1</span> 
    <span>description2</span> 
    <span>description3</span> 
</div> 


$(document).ready(function() { 
options = $('.options > label'); 
descriptions = $('.descriptions > span'); 
options .each(function(idx) {$(this).data('slide', descriptions.eq(idx));}).hover(
    function() { 
     options .removeClass('active'); 
     descriptions.removeClass('active');    
     $(this).addClass('active'); 
     $(this).data('slide').addClass('active'); 
    }, function() { 
     switches.removeClass('active'); 
     slides.removeClass('active'); 
     $('input[name=permForumcon]:checked + label').addClass('active') //this is where is already doesnt seem to work 
     } 
);}); 

на Jsfiddlle: http://jsfiddle.net/mqcP9/8/

Проблема, которая остается, он (добавлен активный класс как на этикетке в вариантах и ​​пролетом в описаниях) не возвращается обратно к выбранному радиооблоку. Я пробовал несколько вещей, которые видны в комментариях при просмотре песочницы jsfiddle. Кто бы мог помочь мне в последней части?

+0

Ваша ссылка на jsfiddle не работает, вы можете исправить ссылку? – rajasaur

+0

@rajasaur. Это не. – gdoron

+0

В чем проблема в этой скрипке? – ShankarSangoli

ответ

0

Имейте это в качестве функции «офф-зависания»:

function() { 
    options.removeClass('active'); 
    descriptions.removeClass('active'); 
    $('label:has(input:checked)').addClass('active'); 
    $('label:has(input:checked)').data('slide').addClass('active'); 
} 

Ваш селектор для проверяемого ярлыке был выключен, что было на самом деле корнем.

+0

, похоже, работает в jsfiddle, время приносит знания на практике, спасибо большое – BrittaGeertsen

+0

Несомненно! Определенно, потребуется некоторое время, чтобы просмотреть варианты для селекторов, хотя ... В общем, все, что самое прямое в строке, это то, что выбрано, когда вы хотели, был родительский элемент проверенного ввода. Вот почему у них есть несколько селекторов класса psuedo, чтобы двигаться вверх в родительской иерархии. –