问题描述
出于某种原因,我想使用按钮而不是工具栏中的按钮来绘制多边形。简而言之,我想点击“点击我!”按钮并开始绘制多边形,而不是从工具栏中选择此选项。我尝试使用 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();
我不知道为什么第二个有效而第一个无效,他们做同样的工作。无论如何,这解决了问题。