如何以编程方式单击 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();
});

解决方法

如果您希望在单击 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();

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...