【问题标题】:Using shiny updateRadioButtons with shinyjs disable/enable使用闪亮的 updateRadioButtons 和闪亮的js禁用/启用
【发布时间】:2016-12-25 00:02:39
【问题描述】:

我需要限制用户选择单选按钮的能力,但始终显示它们。我使用shinyjs::disable 禁用按钮并使用updateRadioButtons 更新选择,但它似乎无法正常工作。只有更新似乎有效,而不是禁用我的代码:

library(shiny)
library(shinyjs)

server = shinyServer(function(input, output, session) {

observeEvent(input$toggle, {

if (input$toggle == "enable") {

  updateRadioButtons(session, "button1", "",
                     c("one" = "one", "two" = "two"),
                     inline = T, selected = "one")

  shinyjs::enable("button1")

}

if (input$toggle == "disable") {

  updateRadioButtons(session, "button1", "",
                     c("one" = "one", "two" = "two"),
                     inline = T, selected = "two")

  shinyjs::disable("button1")

}

 })

})

ui = shinyUI(

fluidPage(

shinyjs::useShinyjs(),

radioButtons("toggle", "",
           c("enable" = "enable", "disable" = "disable"), inline = T),

radioButtons("button1", "",
           c("one" = "one", "two" = "two"), inline = T)

))

shinyApp(ui=ui,server=server)

【问题讨论】:

    标签: r shiny shinyjs


    【解决方案1】:

    发生这种情况是因为更新函数实际上是在稍后进行更新。所以发生的事情是调用了更新函数,然后调用了禁用,按钮被禁用,稍后按钮从更新中重新生成。这是因为闪亮的内部结构如何工作。如果您注释掉更新功能,您会看到该按钮确实被禁用。这有点烦人,但这只是闪亮工作方式的副作用。您可以尝试的一种 hacky 解决方案是使用 shinyjs::delay(100, disable(id)) 代替 disable(id)(这意味着您将添加 100 毫秒的短暂延迟,然后才禁用)。

    【讨论】:

    • 这是一个很棒的小工作,它也帮助了我的 UI - 谢谢!给其他人的说明,您当然可以将延迟更改为更短(例如 5ms),然后延迟对用户来说是不明显的,但在其他事情发生后仍然会发生。
    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2017-01-19
    • 2020-08-08
    • 2018-07-21
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多