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



由于某些原因,我想使用按钮绘制多边形,但不想使用工具栏中的按钮。简而言之,我想点击"点击我!"按钮并开始绘制多边形,而不是从工具栏中选择此选项。我试着用jquery来触发工具栏上的"点击"操作,但根本做不到。我注意到工具栏上的"按钮"并不是真正的buttons,而是简单的类。也许这就是为什么我不能用程序点击它们的原因。我也尝试过使用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代码,它应该触发工具栏上的"绘制多边形"选项,但不起作用:

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

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

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

应该有:

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

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

如果您希望在单击actionButton()UI元素时发生某些事情,请使用observeEvent()在按钮状态更改时(例如单击时(触发代码运行。server代码中的类似内容可能会起作用:

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

最新更新