如果应用程序能够检测到上次单击或更新的小部件的 ID,那么我为 Shiny 的应用程序设计所采用的方法将是最简单的。
This问题的出现解决了问题。但是,当我使用接受的答案运行 MCVE 时,我根本没有任何反应。
当前代码如下。这本质上是链接的问题,并从已接受的答案中进行了明显的替换。
library(shiny)
ui <- fluidPage(
tags$head(
# taken from accepted answer
tags$script(
HTML("$(document).on('shiny:inputchanged', function(event) {
Shiny.setInputValue('last_input', event.name);
});")
)
# through to here
),
numericInput("num1", "Numeric", 0),
textInput("text1", "Text"),
selectInput("select1", "Select", choices = LETTERS[1:4]),
selectInput("selectize1", "Selectize", choices = letters[1:4]),
textOutput("textout")
)
server <- function(input, output, session) {
output$textout <- renderText({
input$last_input
})
}
shinyApp(ui, server)
预期行为:
- 当与小部件交互时,会显示最后一个交互的小部件的 ID。
观察到的行为:
- 无论我与哪个小部件交互,都不会显示小部件 ID。
检查尝试:
- 正在更新 Shiny 版本。
- 原始帖子中的其他代码建议 - 没有变化
- 使用 ...
.ready(function(){$('input').on('shiny:inputchanged'
... 而不仅仅是.on(' Shiny :inputchanged'
.
我是 R 程序员,不是 JS 程序员。具有这两种技能的人可以建议如何使其发挥作用吗?
最佳答案
您需要排除输入,该输入是在 JS 部分中设置的有关要监视的事件的内容,否则您将陷入无限循环。
请查看我的相关回答here :
library(shiny)
ui <- fluidPage(
tags$head(
tags$script(
"$(document).on('shiny:inputchanged', function(event) {
if (event.name != 'changed') {
Shiny.setInputValue('changed', event.name);
}
});"
)
),
numericInput("num1", "Numeric", 0),
textInput("text1", "Text"),
selectInput("select1", "Select", choices = LETTERS[1:4]),
selectInput("selectize1", "Selectize", choices = letters[1:4]),
textOutput("textout")
)
server <- function(input, output, session) {
output$textout <- renderText({
input$changed
})
}
shinyApp(ui, server)
Here可以找到相应的文档。
关于javascript - Shiny未检测到shiny :inputchanged event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75394047/