45

我正在寻找一种在我的 shinyUI 元素上实现禁用/启用功能的方法这里 xiaodaigh给出了如何禁用/启用 an 的提示actionButton(见下图),这是我想要的结果,但是代码并不能与我测试过的其他 gui 元素一起使用(例如numericInput)。

(我知道一个conditionalPanel功能,但这不是我想要的效果。)

我会非常感谢任何建议,尤其是因为我不太熟悉JavaScript.

在此处输入图像描述

4

3 回答 3

61

您在问题中链接到的代码不适用于其他输入小部件的原因是因为不同的输入小部件需要不同的 JavaScript 调用才能被禁用。另一个问题是,当闪亮创建一个输入元素时,有时您提供的 id 是实际 HTML 输入标签的 ID,而有时该 ID 被赋予输入标签的容器。

shinyjs包有一个功能,可以disable使用任何闪亮的输入。免责声明:我写了那个包。

这是您如何实现禁用numericInput您所要求的

library(shiny)
runApp(shinyApp(
  ui = fluidPage(
    shinyjs::useShinyjs(),
    numericInput("test", "Test", 5),
    actionButton("submit", "Choose")
  ),
  server = function(input, output, session) {
    observeEvent(input$submit, {
      shinyjs::disable("test")
    })
  }
))
于 2015-05-24T08:04:06.860 回答
8

Dean Attali建议的代码实际上可以稍作修改,以实现按要求启用和禁用。请参见下面的示例,它根据给定的值激活或停用滑块(如果值超过范围滑块的最大值,则停用)。

library(shiny)
runApp(shinyApp(
    ui = fluidPage(
        shinyjs::useShinyjs(),
        numericInput("val", "Choose value (max 10)", 5),
        sliderInput(inputId = "range",
                    label = "Range",
                    min = 0,
                    max = 10,
                    step = 0.1,
                    value = c(0,2))
    ),
    server = function(input, output, session) {
        observeEvent(input$val, {
            if(input$val <= 10){
                shinyjs::enable("range")
            }else{
                shinyjs::disable("range")
            }
        })
    }
))

于 2019-03-14T11:53:54.303 回答
5

当某个条件为 FALSE 时,你的元素“消失”了怎么办?

如果这是您的意图,您可以将其添加到您的 server.R

output$sliderInputUI <- renderUI({
    if (condition == TRUE) {
        sliderInput("id", "text", 
             min = 1, max = 8, 
             value = 1, step = 1
        )
    }
})

将此添加到您的 ui.R htmlOutput("sliderInputUI")

sliderInput只有当条件为 TRUE 时才会出现在您的 ui 中。

于 2014-06-03T17:11:28.370 回答