【问题标题】:Using Radio Buttons to Show/Hide Content使用单选按钮显示/隐藏内容
【发布时间】:2013-06-19 23:42:21
【问题描述】:

我有 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 问题,但没有一个能解决问题。有人可以帮我吗?谢谢!

【问题讨论】:

    标签: jquery html d3.js radio-button


    【解决方案1】:

    要让它发挥作用,你需要做 3 件事。

    1:在进入第一个条件之前,这样做:

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

    2: 而不是 :

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

    做:

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

    3:在声明.change()函数后,插入:

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

    它会触发它并显示一个图表。

    小提琴:http://jsfiddle.net/k3WJN/13/

    【讨论】:

    • 当人们在应该使用 .prop 时使用 .attr 时会发生很多问题。在 Karl-Andre 的回答中, if ($("#chart1Pie").prop("checked")) 将返回真假。阅读 api 了解更多信息:api.jquery.com/prop.
    • +1 垃圾火狐。没有显示已经有答案。我最终发布了另一个答案。
    • 还有 1 个问题。如何在两个图表之间平滑过渡? (例如,使用 .slideToggle、.fadeToggle 等)。我尝试在每个 if 语句中添加两个 slideToggles,但这看起来很糟糕。
    • 您先上滑,然后在上滑回调中清空图表并创建另一个。在 slideup 回调结束时,您向下滑动:jsfiddle.net/k3WJN/30
    • 这不起作用。标题和单选按钮浮动在图表上方。这搞砸了动画。有没有办法解决?还是我应该将这些东西重新定位到其他地方? jsfiddle.net/k3WJN/31
    猜你喜欢
    • 2014-02-11
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2013-07-06
    相关资源
    最近更新 更多