You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多标记场景下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:43:15