微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。