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