R 禁用以另一个闪亮输入为条件的闪亮输入

R 禁用以另一个闪亮输入为条件的闪亮输入,r,shiny,shinyjs,R,Shiny,Shinyjs,我试图禁用一个闪亮输入,其值取决于另一个闪亮输入。之前,我查看了shinyjs中的disable()函数,但是在我的例子中,它似乎无法禁用这种闪亮的输入。以下是我的例子: library(shiny) library(shinyjs) runApp(shinyApp( ui = fluidPage( useShinyjs(), sliderInput(inputId = "First", label = "First", min =

我试图禁用一个
闪亮输入
,其值取决于另一个
闪亮输入
。之前,我查看了
shinyjs
中的
disable()
函数,但是在我的例子中,它似乎无法禁用这种闪亮的输入。以下是我的例子:

library(shiny)
library(shinyjs)
runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    sliderInput(inputId = "First", label = "First",
                      min = 10, max = 100, value = 40, step = 1),

    uiOutput("Second_UI")
  ),
  server = function(input, output, session) {
    output$Second_UI = renderUI({
              sliderInput(inputId = "Second", label = "Second", 
                min = 0, max = input$First, value = 5)       
            })

    disable("Second_UI")

  }
))
基本上,我想要的是-我的第二个
幻灯片输入
,即
第二个
仍将响应地从
第一个
获取值,但用户应该无法控制它

任何指针都将受到高度赞赏


谢谢,

这不起作用的原因是您多次渲染该元素,但在脚本中仅禁用一次—在元素实际渲染之前

然而,我们实际上可以很简单地解决这个问题
Shinyjs
提供了一个
disabled
函数,允许您将输入初始化为disabled。下面给出了一个工作示例

希望这有帮助




@Florian的回答是正确的(感谢您使用我的shinyjs软件包!)

然而,我想为您的原始代码提供一个更干净、更简单的替代实现

由于唯一需要更改的是最大值,因此可以使用
updateSliderInput()
函数每次只更改最大值,而不是将滑块创建为渲染器。这样,元素本身只创建一次,使用起来更快更容易

library(shiny)
library(shinyjs)
runApp(shinyApp(
    ui = fluidPage(
        useShinyjs(),
        sliderInput(inputId = "First", label = "First",
                    min = 10, max = 100, value = 40, step = 1),
        sliderInput(inputId = "Second", label = "Second", 
                    min = 0, max = 40, value = 5)
    ),
    server = function(input, output, session) {
        observe({
            updateSliderInput(session, "Second", max = input$First)
        })

        disable("Second")

    }
))
library(shiny)
library(shinyjs)
runApp(shinyApp(
    ui = fluidPage(
        useShinyjs(),
        sliderInput(inputId = "First", label = "First",
                    min = 10, max = 100, value = 40, step = 1),
        sliderInput(inputId = "Second", label = "Second", 
                    min = 0, max = 40, value = 5)
    ),
    server = function(input, output, session) {
        observe({
            updateSliderInput(session, "Second", max = input$First)
        })

        disable("Second")

    }
))