我需要解决此问题的方法。 我在弹出窗口中有一个提交按钮。当我点击标记时,输入$ map_marker_click $ id现在包含点击标记的id。
弹出窗口中有一个提交按钮。单击提交按钮时,我想将输入$ map_marker_click $ id保存到变量中。使用oberserveEvent或eventReactive都不适合我。
以下是将其另存为app.R的代码
library(shiny)
library(leaflet)
df <- data.frame("id" = c("1", "2"),
"lng" = c(-93.65, -93.655),
"lat" = c(42.0285, 42.03),
"Text" = c("Department of Statistics", "something else"))
ui <- fluidPage(
leafletOutput("map"),
textOutput("locationid1"),
textOutput("locationid2")
)
server <- function(input, output, session) {
output$map <- renderLeaflet({
df %>% leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
setView(-93.65, 42.0285, zoom = 15) %>%
addMarkers(layerId = ~id, popup = ~paste("<b>", Text, "</b></br>
<button id='selectlocation' type='button' class='btn btn-default action-button'>Select Location</button>"))
})
id1 <- reactive({
validate(
need(!is.null(input$map_marker_click), "Please select a location from the map above")
)
input$map_marker_click$id
})
id2 <- eventReactive(input$selectlocation, {
input$map_marker_click$id
})
output$locationid1 <- renderText({paste("Location Selected using marker click:", id1())})
output$locationid2 <- renderText({paste("Location Selected using popup select button click:", id2())})
}
shinyApp(ui, server)
答案 0 :(得分:1)
问题可能是Shiny不知道你正在添加按钮,因此没有绑定。
一个肮脏的技巧可能是向按钮添加<button onclick='Shiny.onInputChange(\"button_click\", Math.random())' id='selectlocation' type='button' class='btn btn-default action-button'>Select Location</button>
功能,告诉Shiny它已被点击:
例如:
server.R
此JS函数会将随机数发送给Shiny,您可以使用input$button_click
在input$button_click
中访问它。
然后,您可以在eventReactive
Shiny.unbindAll()
执行此操作的正确方法可能是在底部使用Shiny.bindAll()
和"\"Hallo" + (char)10 + "World\""
see here,但我不确定如何在此处执行此操作。