2014-01-13 4 views
0

Я потратил несколько часов на это и не смог найти решение, которое сработало, поэтому я обращаюсь к вам :) Как вы можете видеть из этой скрипки (http://jsfiddle.net/PPcgE/), я был в состоянии предназначаться радиокнопками щелчка с этим кодом:Отображение содержимого на основе опции, нажатой в поле выбора A

$("input[type='radio']").click(function (e) { 
    if ($('.cos-cond').is(":visible")) { 
     e.preventDefault(); 
    } else { 
     var clicked = $(this).attr('title'); 
     var cls = [$('.one'), $('.two'), $('.three'), $('.four'), $('.five'), $('.six'), $('.seven'), $('.eight'), $('.nine'), $('.ten')]; 
     for (i = 0; i < cls.length; i++) { 
      if (cls[i].attr('title') === clicked) { 
       cls[i].fadeIn('fast', function(){ 
        setTimeout(function(){ 
         $('.cos-cond').fadeOut('slow');}, 5000); 
       }); 
      } 
     } 
    } 
}); 

Я пытаюсь сделать то же самое (отображающую либо span.eleven, span.twelve или span.thirteen на этот раз), на основании которого option щелкают/выбрано select коробка. Лучшее, что мне удалось, это заставить всех трех сразу появиться.

+0

У вас есть код, который относится к выбору? Я посмотрел на скрипку, и все, что она показывает, это тот же самый код. Вам нужно опубликовать рабочий код для выбора, если вы хотите получить ответ. –

+0

также, код в скрипке тоже не работает. Независимо от того, какой номер косметического условия я выбираю, он показывает одно и то же сообщение под ним. – erikrunia

+0

это исправляет ваш исходный код, поэтому работают сообщения с радиокнигами: http://jsfiddle.net/PPcgE/4/ – erikrunia

ответ

0

Ваш код не должен быть длиннее, чем это

$(document).ready(function(){ 
    $("input[type='radio']").click(function (e) { 
     $('.cos-cond, .work-cond').hide(); 
     var clicked = $(this).attr('title'); 
     $('span.cos-cond[title=' + clicked + ']').fadeIn(300); 
    }); 
    $("select").change(function (e) { 
     $('.cos-cond, .work-cond').hide(); 
     var value = $(this).val(); 
     var title = $('option[value="' + value + '"]', this).attr('title'); 
     $('span.work-cond.' + title).fadeIn(300); 
}); 
}); 

http://jsfiddle.net/PPcgE/5/

+0

Спасибо! Я определенно передумал. Быстрый вопрос: что именно представляет собой параметр 'e' функции? Похоже, что это работает так же, как работает метод '.each()'? – MyCompassSpins

+0

e - объект события javascript (попробуйте console.log (e.type, e.screenX), чтобы сбрасывать свойства события), но аргументы метода .each - это индекс объекта в коллекции и сам объект. –

+0

У меня такая же дискуссия с другим пользователем ниже. Код работает так же с объектом события или без него, поэтому, я думаю, мне просто интересно, почему его использовать или не использовать. – MyCompassSpins

0

Попробуйте

$(".emf-hide").change(function(e){ 
     var val = $(".emf-hide option:selected").val(); 
     $('.work-cond').hide(); 
     switch(val){ 
     case 'Like New - No Functional Problems': 
       $('.eleven').show();  
     break;  
     case 'Minor Functional Problems': 
       $('.twelve').show();  
     break;  
     case 'Non-functional': 
       $('.thirteen').show();  
     break;  
     } 
    });   

Рабочий пример here

+0

Очень важно! Я пытался настроить таргетинг на них кликом, который просто не работал. Я не знал о методе '.change()'. Быстрый вопрос: добавляет ли параметр 'e' к функции, чтобы события менялись каждый раз, а не накапливались? – MyCompassSpins

+0

параметр e захватывает событие. но я не понимал: «Удостоверьтесь, что события меняются каждый раз, а не накапливаются?» –

+0

Одна из проблем, с которыми я сталкивался в моих ранних попытках, заключалась в том, что щелчок будет показывать правильный контент, но не будет исчезать на новом клике и «пролеты» просто накапливались друг на друга. Ваш код, похоже, работает так же или без параметра 'e', поэтому мне было просто интересно, почему он был там. – MyCompassSpins

1

Ваш оригинальный код сломан, i've create a fiddle that fixes it.

Ваша проблема заключалась в том, что вы исчезали, ваш селектор выбирал все из них, видимые или нет, а затем показывал ВСЕ из них, когда они исчезали. Таким образом, всегда отображается последний (самый верхний).

if (cls[i].attr('title') === clicked) { 
    cls[i].fadeIn('fast', function(){ 
     setTimeout(function(){ 
      $('.cos-cond:visible').fadeOut('slow');}, 5000); 
    }); 
} 

Кроме того, вам необходимо указать, как вы пытаетесь получить раскрывающийся список. Вы предоставили только старый код и ничего больше.

+0

@erikunia: Я ценю отзывы. Я не уверен, что проблема была для вас. Этот код (хотя и не идеальный) работал отлично для меня и для других в скрипке, которую я предоставлял. – MyCompassSpins

Смежные вопросы