多标记场景下Shiny地图标记的网站链接失效问题求助
问题解决:多标记时Shiny地图按钮点击无响应
问题原因
所有标记弹出框中的按钮使用了相同的inputId="checkGroup",而HTML要求页面元素ID必须唯一。多个按钮共用同一ID会导致浏览器无法识别触发的是哪个按钮,因此点击后无任何反应。
解决方案
为每个按钮生成唯一的inputId,可以利用数据中的site字段(每个站点唯一)来创建独特ID,例如btn_1、btn_2。
修正后的完整代码
library(shiny) library(leaflet) mydata <- data.frame(site = c(1:2), longitude = c(115.7, 115.8), latitude = c(-32.5,-32.6), address = c("window.open('https://www.google.com.au/')","window.open('http://www.bom.gov.au/')")) ui <- fluidPage( checkboxGroupInput("checkGroup", "site", choices = c("Site" = 1, "Site 2" = 2), selected = 1), leafletOutput ("map") ) server <- function(input, output, session) { output$map <- renderLeaflet({ leaflet() %>% addTiles() }) mydata_filtered <- reactive(mydata[mydata$site %in% input$checkGroup, ]) observeEvent(input$checkGroup, { leafletProxy("map", data = mydata_filtered()) %>% clearGroup ("checkGroup") %>% addMarkers(lng = ~longitude, lat = ~latitude, group = "checkGroup", popup= ~paste( actionButton( inputId= paste0("btn_", site), label="Get url", onclick= address ))) }) } shinyApp(ui, server, options = list(launch.browser=T))
关键修改点
- 将按钮的
inputId从固定值"checkGroup"改为paste0("btn_", site),确保每个按钮ID唯一。 - 移除了初始地图中冗余的标记添加逻辑,仅保留底图加载,避免重复渲染。
内容的提问来源于stack exchange,提问作者Alan Cottingham
相关产品推荐
相关产品推荐

