使用闪亮的updateRadioButtons和shinyjs禁用/启用

时间:2016-08-18 06:55:46

标签: r shiny shinyjs

我需要限制用户选择单选按钮的能力,但始终显示它们。我使用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)

1 个答案:

答案 0 :(得分:1)

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