修改R Shiny conditionalPanel的JS表达式适配多选下拉框子串判断
解决Shiny多选下拉框的conditionalPanel显示问题
当selectInput设置multiple = TRUE时,前端JS里的input.dropdown1不再是单个字符串,而是一个数组。原来的indexOf('box')是字符串方法,用在数组上会检查数组里是否有完全等于'box'的元素,自然匹配不到带box的选项,导致面板失效。
只需要修改conditionalPanel的condition表达式,用JS数组的some()方法遍历选项,检查是否有元素包含'box'子串:
library(shiny) ui <- fluidPage( selectInput(inputId = "dropdown1", label = "dropdown", choices = c("green box","red circle", "blue box", "yellow circle"), selected = "", multiple = TRUE ), conditionalPanel( condition = "input.dropdown1.some(item => item.indexOf('box') >= 0)", textOutput("result") ) ) server <- function(input, output, session) { output$result <- renderText({ paste("Result:", input$dropdown1) }) } shinyApp(ui, server)
代码说明
input.dropdown1.some(...):遍历下拉框选中的所有元素,只要有一个元素满足条件就返回true,触发面板显示item => item.indexOf('box') >= 0:对每个元素检查是否包含box子串,包含则返回true
内容的提问来源于stack exchange,提问作者TheDza
相关产品推荐
相关产品推荐

