如何以编程方式单击 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();
我不知道为什么第二个有效而第一个无效,他们做同样的工作。无论如何,这解决了问题。
出于某种原因,我想使用按钮而不是工具栏中的按钮来绘制多边形。简而言之,我想单击 '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();
我不知道为什么第二个有效而第一个无效,他们做同样的工作。无论如何,这解决了问题。