R Shiny - 禁用/有光泽的UIUI元素

Mar*_*ras 35 r shiny

我正在寻找一种方法来实现我的shinyUI元素的禁用/ abling功能.这里 xiaodaigh给出了一个提示如何禁用/能够actionButton(见下图),这是我想要的结果,但是代码并没有使用我测试的其他gui元素(例如numericInput).

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

我非常感谢任何建议,特别是因为我不太熟悉JavaScript.

在此输入图像描述

Dea*_*ali 48

您在问题中链接到的代码不适用于其他输入窗口小部件的原因是因为不同的输入窗口小部件需要不同的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")
    })
  }
))
Run Code Online (Sandbox Code Playgroud)

  • @Shahryar上面给出的代码将起作用,`library()`调用不会丢失,因为我通过在每个函数调用之前添加`shinyjs ::`来显式调用shinyjs函数 (4认同)
  • 有没有办法对“selectInput()”小部件中的特定选择执行此操作?按照您的指示,无论在“selectInput()”小部件中选择哪个选项,它看起来都会禁用我的“radioButtons()”小部件,因为服务器的输入与答案选择无关。 (2认同)

小智 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")
            }
        })
    }
))

Run Code Online (Sandbox Code Playgroud)


tna*_*ake 5

当某个条件为 FALSE 时,当您的元素“消失”时呢?

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

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

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

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

  • 您可以使用 if (!is.null(input$id)) 来引用不存在的输入变量。 (2认同)