如何在R Shiny中通过actionButton修改selectInput的选中值
解决方案
你要实现清空选中的功能,只需要调用Shiny内置的updateSelectInput()方法动态修改选择器的选中值即可,不需要用shinyjs的reset()方法,具体修改逻辑如下:
- 监听
remove_all按钮的点击事件,触发时调用updateSelectInput,将filter_by_project的selected参数设置为你指定的提示文本 - 补充
add_all按钮的点击监听,触发时将选中值设置为所有项目列表
修改后可直接运行的完整代码如下:
library(shiny) library(shinyjs) library(tibble) test <- tibble(project = c("Justin", "Corey","Sibley"), april_2021 = c(10, 100, 101), may_2021 = c(1, 4, 7)) ui <- fluidPage( useShinyjs(), sidebarLayout( sidebarPanel( div(id = "project_inputs", selectInput(inputId = "filter_by_project", label = "Filter by Project", choices = c(sort(unique(test$project)), "Please Select at Least One Project"), multiple = TRUE, selected = sort(unique(test$project)))), actionButton(inputId = "remove_all", label = "Unselect All Projects", style = "color: #FFFFFF; background-color: #CA001B; border-color: #CA001B"), actionButton(inputId = "add_all", label = "Select All Projects", style = "color: #FFFFFF; background-color: #CA001B; border-color: #CA001B"), ), mainPanel( ) ) ) server <- function(input, output, session) { # update类方法必须传入session参数才能正常调用 # 清空所有选中,切换为提示文本 observeEvent(input$remove_all, { updateSelectInput(session, inputId = "filter_by_project", selected = "Please Select at Least One Project") }) # 全选所有项目 observeEvent(input$add_all, { updateSelectInput(session, inputId = "filter_by_project", selected = sort(unique(test$project))) }) } shinyApp(ui = ui, server = server)
补充说明:如果你后续需要判断用户是否选中了有效项目,只要判断
input$filter_by_project不等于提示文本即可。
内容的提问来源于stack exchange,提问作者J.Sabree
相关产品推荐
相关产品推荐

