我正在寻找一种方法来实现我的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)
小智 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)
当某个条件为 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 中。