【问题标题】:Observe Event to Hide Action Button in Shiny观察事件以在 Shiny 中隐藏操作按钮
【发布时间】:2016-12-11 04:34:47
【问题描述】:

在我的 Shiny 应用程序中,我试图根据是否定义了 ui.R 中的另一个用户输入来包含显示或隐藏操作按钮的逻辑。由于应用程序中的一些其他复杂性,我无法使用 uiOutput/renderUI 功能来执行此操作。

我的方法是为输入创建一个观察者,然后使用 CSS 标签相应地显示或隐藏操作按钮。我不了解 CSS,因此很困难。

这是我的应用程序中的 ui 表单 -

现在,我有一个反应函数locationSpecified,它返回输入位置是否为空,基于此我必须显示或隐藏“运行”按钮。

这是我在 ui.r 中添加“运行”按钮的方式...

fluidRow(column(6, align="center", offset = 3, actionButton("action", "RUN")))

这就是我在 server.R 中尝试的(但显然不起作用)...

  observe({
    if(locationSpecified() == 1)
      tags$head(tags$style(type="button/css", ".btn {display: inline-block}"))
    if(locationSpecified() == 0)
      tags$head(tags$style(type="button/css", ".btn {display: none}"))
  })

我希望解决这个问题并不复杂,如果你能告诉我如何让它工作,我将不胜感激。

提前致谢,

阿什

【问题讨论】:

  • shinyjs 包有一个 toggle 函数,可以满足您的需求。 conditionalPanel 也可以。

标签: r shiny


【解决方案1】:

您可以像这样使用conditionalPanel

#UI
conditionalPanel(condition='input.location!=null && input.location!=""',
fluidRow(column(6, align="center", offset = 3, actionButton("action", "RUN"))))

或者你可以使用shinyjstoggle

#UI
useShinyjs() # include useShinyjs() somewhere in UI
#server
observe({ toggle(id="action", condition=!is.null(input$location))})

【讨论】:

  • observe({ toggle(id="action", condition = locationSpecified()) }) 在这里不起作用(不知道为什么)。我尝试了许多不同的方法来使此切换起作用。
【解决方案2】:

终于用shinyjs 让它工作了。

#ui
useShinyjs(),
fluidRow(column(6, align="center", offset = 3, actionButton("action", "RUN"))))

#server
observe({
  shinyjs::hide("action")

  if(locationSpecified())
     shinyjs::show("action")
})

感谢carl 将我指向shinyjs。

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 2018-01-04
    • 2018-11-28
    • 2016-07-27
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多