在闪亮的r?
中单击后,是否有办法禁用checkboxgroup元素我试图弄清楚问题,但没有成功。我添加了我正在工作的复选框组。 谢谢你的帮助!
library(shiny)
shinyUI(fluidPage(
checkboxGroupInput("a","A",choices = 1:7),
tags$head(HTML(
'
<script type="text/javascript">
document.getElementById("a").onclick = function(){
document.getElementById("a").disabled=true;
}
</script>
'
))
))
shinyServer(function(input, output, session) {
})
答案 0 :(得分:5)
您可以使用shinyjs
包,它随附disable
功能。您可以使用observeEvent
触发禁用,其中事件是复选框值。使用shinyjs
的唯一警告是在应用程序的ui中添加函数useShinyjs
。
library(shiny)
ui <- shinyUI(fluidPage(
shinyjs::useShinyjs(),
checkboxGroupInput("a","A",choices = 1:7)
))
server <- shinyServer(function(input, output, session) {
observeEvent(input$a, shinyjs::disable("a"))
})
shinyApp(ui,server)
该软件包具有其他功能,例如enable
可启用已禁用的元素,或toggleState
可在启用/禁用状态之间切换元素。
disable
shinyjs
函数有一个选择器参数,可用于标识要禁用的元素而不使用它们的闪亮ID。我通过使用SelectorGadget确定传递给选择器的正确查询的方式。小工具给了一个不包括有光泽的,所以我添加了一个“B”复选框组,并且确实更改了ID以包含闪亮的ID“a”所以我相当自信这应该在添加更多元素到闪亮的应用程序后工作。知道选择器查询后,解决方案的其余部分将识别单击该组中复选框的标签,并构建要使用的disable
函数的字符串。希望这会有所帮助。
library(shiny)
ui <- shinyUI(fluidPage(
shinyjs::useShinyjs(),
#original checkbox group
checkboxGroupInput("a","A",choices = 1:7),
#additional checkbox group to identify how to work around multiple groups
checkboxGroupInput("b","B",choices = 1:7)
))
server <- shinyServer(function(input, output, session) {
#initialize reactive values (will use to store selected boxes to identify newest selection)
rv <- reactiveValues()
#initialize selected boxes to NULL
rv$selectedBoxes <- NULL
observeEvent(input$a, {
#extract newest selection by identifying which values are in a that have not been previously selected
newSelection <- input$a[which(!(input$a %in% rv$selectedBoxes))]
#create object that identifies newly selected checkbox (syntax found using selectorgadget)
subElement <- paste0("#a .checkbox:nth-child(", newSelection,") label")
#disable single checkbox of group
shinyjs::disable(selector=subElement)
#store all selected checkboxes
rv$selectedBoxes <- input$a
})
})
shinyApp(ui,server)
答案 1 :(得分:0)
两件事:
tags$head(HTML(
'
<script type="text/javascript">
document.getElementById("a").onclick = function(){
document.getElementById("a").disabled=true;
}
</script>
'
))
应该是:
tags$script(HTML(
'
document.getElementById("a").onclick = function(){
document.getElementById("a").disabled=true;
}
'
))
这仍然无效,因为checkboxGroupInput
没有onclick事件。如果您为"a"
使用不同的HTML元素,则可以使用:
library(shiny)
shinyUI(fluidPage(
actionButton("a","A"),
tags$head(HTML(
'
document.getElementById("a").onclick = function(){
document.getElementById("a").disabled=true;
}
'
))
))
shinyServer(function(input, output, session) {
})