R闪亮-禁用/启用shinyUI元素

R闪亮-禁用/启用shinyUI元素,r,shiny,R,Shiny,我正在寻找一种方法来在我的shinyUI元素上实现禁用/禁用功能。小戴给出了一个如何禁用/启用操作按钮的提示(见下图),这是我想要的结果,但我测试过的其他gui元素(例如numericInput)的代码没有达到这个效果 (我知道一个conditionalPanel功能,但这不是我想要的效果。) 我非常感谢任何建议,特别是因为我对JavaScript不太熟悉 当某个条件为FALSE时,元素“消失”时该怎么办 如果这是您的意图,您可以将其添加到服务器中。R output$sliderInputUI

我正在寻找一种方法来在我的shinyUI元素上实现禁用/禁用功能。小戴给出了一个如何禁用/启用
操作按钮的提示(见下图),这是我想要的结果,但我测试过的其他gui元素(例如
numericInput
)的代码没有达到这个效果

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

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


当某个条件为FALSE时,元素“消失”时该怎么办

如果这是您的意图,您可以将其添加到服务器中。R

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

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

该软件包有一个
禁用
功能,可与任何闪亮的输入一样工作。免责声明:我写了那个软件包

下面是如何按照您的要求禁用
数字输入的方法

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")
    })
  }
))
实际上,可以稍微修改建议的代码,以实现根据请求启用和禁用。请参见下面的示例,该示例根据给定的值激活或禁用滑块(如果值超过最大范围,则禁用滑块)

库(闪亮)
runApp(shinyApp)(
ui=fluidPage(
shinyjs::useShinyjs(),
数值输入(“val”,“选择值(最大10)”,5),
sliderInput(inputId=“range”,
label=“Range”,
最小值=0,
最大值=10,
阶跃=0.1,
值=c(0,2))
),
服务器=功能(输入、输出、会话){
observeEvent(输入$val{

if(input$val)当条件不满足时,您如何调用“id”?当您引用不存在的输入变量时,Shiny似乎会创建一个错误。您可以使用
if(!is.null(input$id))
引用不存在的输入变量。在ui中如何引用SlideInputUI?答案:uiOutput(“SlideInputUI”)这违反了大多数用户界面设计指南,元素不应该出现和消失,而应该启用/禁用。对于
selectInput()
小部件中的特定选择,有没有办法做到这一点?按照您的说明,它看起来像是禁用了我的
单选按钮()
小部件,无论在
selectInput()中选择了哪个选项
widget,因为服务器的输入与答案选项无关。不幸的是,您无法禁用/启用输入中的特定选项。复选框、收音机、选择等都是如此。这只是因为整个输入都有一个id,但特定选项没有
库(shinyjs)
missing@Shahryar上面给出的代码可以工作,
library()
调用没有丢失,因为我通过在每个函数调用前加上
shinyjs::
来显式调用shinyjs函数。你知道是否可以在服务器函数之前禁用对象吗?我有一个UI,加载需要相当长的时间,如果我将禁用函数放在服务器函数中,我的对象只会渲染完成后淡入淡出状态。我不希望用户首先看到按钮处于活动状态,然后在应用程序完全加载时突然变为不活动状态
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")
            }
        })
    }
))