基于Leaflet标记点击更新Shiny多选selectInput组件的问题
解决Shiny中Leaflet标记点击追加选择selectInput的问题
你的需求很实际——目前的代码每次点击地图标记都会直接替换selectedSites的选中值,要实现在现有选择基础上追加新站点的效果,我们只需要先获取当前已选中的选项,再把新点击的站点ID合并进去(还能顺便避免重复添加)。
修改后的代码实现
observeEvent(input$sitemap_marker_click, { click <- input$sitemap_marker_click # 获取当前selectInput已选中的所有选项 current_selected <- input$selectedSites # 检查点击的站点ID是否已经在选中列表里 if (!click$id %in% current_selected) { # 如果不在,就把新ID追加到现有列表中 new_selected <- c(current_selected, click$id) } else { # 可选:如果想要支持"点击取消选中",就取消下面的注释,删掉重复的ID # new_selected <- current_selected[current_selected != click$id] # 暂时保持原有选择,不重复添加 new_selected <- current_selected } # 更新selectInput的选中值为合并后的列表 updateSelectInput(session, "selectedSites", selected = new_selected) })
额外注意事项
- ID与选项值的匹配:要确保Leaflet标记的
id和selectInput中选项的value完全一致。比如你的原selectInput用的是sensor_locations$description作为选项文本和值,那标记的id必须对应这个字段;如果你的selectInput是用id作为值、description作为显示文本(如下),那标记id就要对应sensor_locations$id:
selectInput("selectedSites", "Select Site(s) :", choices = setNames(sensor_locations$id, sensor_locations$description), multiple = TRUE, selected = sensor_locations$id)
- 切换选中状态的拓展:如果想要实现“点击标记一次添加,再点击一次移除”的切换效果,只需要把代码中else块的注释打开,替换掉当前的
new_selected赋值即可,这样用户就能灵活地通过地图标记增删选择项。
内容的提问来源于stack exchange,提问作者z star
相关产品推荐
相关产品推荐

