我正在尝试将 ui.R 的JavaScript变量的值发送到 Server.R 。 当用户点击链接时,会提醒其href值。直到这里它工作正常。 链接的格式为
<a href="something.com" onclick=\"clickFunction(this.href); return false;\" target=\"_blank\">Sample link </a>
现在,href值存储在 ui.R 中的变量link
中。
我使用 Shiny.onInputChange 函数将链接值发送到 server.R 。
但 server.R 中的观察功能并没有给我任何价值。如果可能的话,请告诉我如何使用观察功能或任何其他方式。
ui.r
library(shiny)
shinyUI(fluidPage(
tags$script(HTML("
function clickFunction(link){
alert(link);
Shiny.onInputChange(\"linkClicked\",link);
}
"))
//rest of the code which is not related
)
server.R
library(shiny)
shinyServer(function(input, output) {
observe({
input$linkClicked
print(input$linkClicked)
})
})
答案 0 :(得分:5)
我并不完全了解链接的来源以及应用程序的外观,因为您没有提供足够的代码(例如:“UI中的变量”是什么意思?)。但是这里有一个小例子,展示了javascript如何成功地向服务器发送信息。我正在使用的是shinyjs包,这是我写的包。
library(shinyjs)
jscode <- "
shinyjs.clickfunc = function(link) {
alert(link);
Shiny.onInputChange('linkClicked', link);
}"
runApp(shinyApp(
ui = fluidPage(
useShinyjs(),
extendShinyjs(text = jscode),
textInput("link", ""),
actionButton("btn", "submit")
),
server = function(input, output, session) {
observeEvent(input$btn, {
js$clickfunc(input$link)
})
observe({
input$linkClicked
print(input$linkClicked)
})
}
))
修改强>:
如果我正确理解链接是如何生成的,那么
runApp(shinyApp(
ui = fluidPage(
tags$script(HTML("
function clickFunction(link){
alert(link);
Shiny.onInputChange('linkClicked',link);
}
")),
tags$a(href="www.google.com", onclick="clickFunction('rstudio.org'); return false;", "click me")
),
server = function(input, output, session) {
observe({
input$linkClicked
print(input$linkClicked)
})
}
))