我有一个很棒的应用程序,里面有很多数字输入。有些数字依赖于其他数字的值。举个例子,如果输入的input_2较大,我需要修改input_1,比如input_1 = input_2 + 1。问题是,如果用户输入的速度太慢,它会取输入的input_2的第一位数字,比如5。并使input_1等于6,即使您完成键入540。
下面是一个例子:
library(shiny)
ui <- fluidPage(
numericInput("input1", "Input 1:", 0),
numericInput("input2", "Input 2:", 0)
)
server <- function(input, output, session) {
observeEvent(input$input2, {
if (input$input2 > input$input1) {
updateNumericInput(session, "input1", value = input$input2 + 1)
}
})
}
shinyApp(ui, server)
我试过使用invalidateLater,或者debounce,但是我认为我没有正确地使用它,因为输出仍然几乎是立即改变的。理想情况下,它只在焦点丢失时更新,但是我不想在我的代码中添加js。所以有一个固定的定时器来更新似乎是一个很好的中间地带。有什么想法吗?
2条答案
按热度按时间dfddblmv1#
正如您已经提到的,
debounce
是正确的选择:ifsvaxew2#
下面是使用
shinyjs
包中的delay
函数的示例:在值1应该大于值2的情况下,在2秒之后,值2将被更新为等于1 +值1。