说我有以下闪亮的应用程序:
library(shiny)
ui <- fluidPage(
column(3,
radioButtons("radios", "",
c("Enabled" = "enabled",
"Disabled" = "disabled"),
inline = TRUE)
),
column(4, textInput("text", "", value = "Disable me"))
)
server <- function(input, output) {
}
shinyApp(ui=ui, server=server)
Run Code Online (Sandbox Code Playgroud)
textInput基于所选单选按钮禁用基本按钮的最简单方法是什么?我知道我只需要添加... disabled />的input标签,但我对如何做,在闪亮的不知道.
我尝试通过将HTML粘贴为字符串,选定的无线电值和HTML的其余部分,使用uiOutput和renderUI(基于此)来"手动"构建完整标记,但这不起作用.
将textInput产生这样的:
<input id="text" type="text" class="form-control" value="Disable me"/>
Run Code Online (Sandbox Code Playgroud)
我需要能够在上面和下面之间切换:
<input id="text" type="text" class="form-control" value="Disable me" disabled />
Run Code Online (Sandbox Code Playgroud)
Dea*_*ali 13
如果你使用这个shinyjs包,这种东西实际上是非常微不足道的- 它的构建正是因为这些问题经常出现.有被调用的函数disable,并enable可以在你的服务器调用来禁用/启用输入,也可以使用toggleState功能基于条件的启用/禁用.以下是如何使用最少的代码实现您想要的,而无需使用JavaScript:
library(shiny)
ui <- fluidPage(
shinyjs::useShinyjs(),
column(3,
radioButtons("radios", "",
c("Enabled" = "enabled",
"Disabled" = "disabled"),
inline = TRUE)
),
column(4, textInput("text", "", value = "Disable me"))
)
server <- function(input, output, session) {
observe({
shinyjs::toggleState("text", input$radios == "enabled")
})
}
shinyApp(ui=ui, server=server)
Run Code Online (Sandbox Code Playgroud)
修改原始代码所需要做的就是添加一个调用shinyjs::useShinyjs(),将session参数添加到服务器,然后添加调用shinyjs::toggleState().
免责声明:我写了shinyjs包
session$sendCustomMessage您可以在服务器(生成禁用或启用文本框的 javascript)和Shiny.addCustomMessageHandlerUI(执行 javascript)中执行此操作。
library(shiny)
ui <- fluidPage(
tags$head(tags$script(HTML('
Shiny.addCustomMessageHandler("jsCode",
function(message) {
eval(message.code);
}
);
'))),
column(3,
radioButtons("radios", "",
c("Enabled" = "enabled",
"Disabled" = "disabled"),
inline = TRUE)
),
column(4, textInput("text", "", value = "Disable me"))
)
server <- function(input, output, session) {
observe({
if(input$radios == "disabled") {
session$sendCustomMessage(type="jsCode",
list(code= "$('#text').prop('disabled',true)"))
} else {
session$sendCustomMessage(type="jsCode",
list(code= "$('#text').prop('disabled',false)"))
}
})
}
shinyApp(ui=ui, server=server)
Run Code Online (Sandbox Code Playgroud)