如何以编程方式单击 DrawToolbar 上的元素?

How to programmatically click element on DrawToolbar?

出于某种原因,我想使用按钮而不是工具栏中的按钮来绘制多边形。简而言之,我想单击 'Click me!' 按钮并开始绘制多边形,而不是从工具栏中选择此选项。我尝试使用 jquery 来触发工具栏上的 'click' 操作,但根本无法执行此操作。我注意到工具栏上的 'buttons' 并不是真正的 buttons,而是简单的 类。也许这就是为什么我不能以编程方式对它们进行 'click' 的原因。我也尝试使用 observeEvent 但也不能这样做。你知道我怎样才能触发这个动作吗?

这是工作示例:

library(shiny)
library(leaflet)
library(leaflet.extras)
library(dplyr)
library(sf)

ui <- fluidPage(
    actionButton("btn", label = "Click me!"),
    leafletOutput("map")
)

server <- function(input, output, session) {
    
    coords <- quakes %>%
        sf::st_as_sf(coords = c("long","lat"), crs = 4326)

    output$map <- leaflet::renderLeaflet({
    leaflet::leaflet() %>% 
        leaflet::addTiles() %>% 
      leaflet::setView(172.972965,-35.377261, zoom = 4) %>%      
      leaflet::addCircleMarkers(
        data = coords,
        stroke = FALSE,
        radius = 6
        ) %>%         
      leaflet.extras::addDrawToolbar()
  })

}

shinyApp(ui, server)

这是我的 jQuery 代码,它应该触发工具栏上的 'draw polygon' 选项但不起作用:

$('#btn').click(function(){
  $('.leaflet-draw-draw-polygon').click();
});

如果您希望在单击 actionButton() UI 元素时发生某些事情,请在按钮状态更改时使用 observeEvent() 触发代码 运行 (例如,当它被点击时)。在你的 server 代码中这样的东西可能会起作用:

observeEvent(input$btn, {
  # the code you want to run when button is clicked
}

我找到了解决问题的办法。在 jQuery 中,而不是:

$('.leaflet-draw-draw-polygon').click();

应该有:

document.querySelector('.leaflet-draw-draw-polygon').click();

我不知道为什么第二个有效而第一个无效,他们做同样的工作。无论如何,这解决了问题。