2013-06-19 3 views
1

У меня есть данные в виде JSON, и я пытаюсь визуализировать его с помощью D3.js. Я хочу дать пользователю возможность того, на каком графике они просматривают данные. Я безуспешно пытался сделать плавный переход между ними, поэтому решил просто сделать это с помощью переключателей. Вот что я получил:Использование кнопок радиосвязи для отображения/скрытия содержимого

$(document).ready(function() { 
    if ($("input[name='chart']:checked").val() == 'pie') { 
     // ... Graph 1 
    } else if ($("input[name='chart']:checked").val() == 'bar') { 
     // ... Graph 2 
    } 
}); 

JSFIDDLE

Это показывает график, который имеет свою радиокнопку галочку при загрузке. Однако, когда я нажимаю кнопки, они не меняются. Я провел некоторое исследование и обнаружил, что, вероятно, мне нужно включить функцию change(). Вот то, что я пробовал:

$(document).ready(function() { 
    $("input[name=chart]:radio").change(function() { 
     if ($("#chart1Pie").attr("checked")) { 
      // ... Graph 1 
     } else if ($("#chart1Bar").attr("checked")) { 
      // ... Graph 2 
     } 
    }); 
}); 

JSFIDDLE

Есть несколько вещей неправильно с этим. 1) Выбранный график не загружается при загрузке страницы. 2) При нажатии переключателя появляется только круговая диаграмма. 3) При нажатии на другую радиокнопку предыдущий график не исчезает; он просто ставит новый под ним.

Я рассмотрел несколько вопросов StackOverflow, и ни одна из них не решила проблему. Кто-нибудь может мне помочь? Благодаря!

ответ

3

У вас есть 3 дела, чтобы заставить его работать.

1: Перед входом в первое условие, это сделать:

$('#chart').empty(); 

2: вместо:

if ($("#chart1Pie").attr("checked")) 

сделать:

if ($("#chart1Pie").is(":checked")) 

3: справа после объявления функции .change() вставить это:

$('input:radio:first').trigger('change'); 

это вызовет его и показать график.

Fiddle: http://jsfiddle.net/k3WJN/13/

+0

Многие проблемы происходят, когда люди используют .attr, когда они должны использовать .prop. В ответе Карла-Андре, если ($ ("# chart1Pie"). Prop ("checked")) вернет true и false. Прочтите api для получения дополнительной информации: http://api.jquery.com/prop/. –

+0

+1 дерьмо firefox. Не показывал, что уже есть ответ. и я закончил публикацию другого ответа. – PSL

+0

1 вопрос. Как бы я плавно переключался между двумя графиками? (например, с использованием .slideToggle, .fadeToggle и т. д.). Я попробовал добавить два слайда в каждый оператор if, но это выглядит ужасно. – TFischer

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