下面的MWE代码使用observeEvent()
函数和reactiveVal()
来跟踪和显示selectInput()
框被点击的次数和actionButton()
被点击的次数。actionButton()
跟踪工作正常。注意在output$...
代码中selectInput()
和actionButton()
的工作方式不同,看起来很奇怪。
无论如何,我无法让selectInput()
跟踪与actionButton()
相同的内容。当第一次调用应用程序时,用户单击第一个选项时会呈现selectInput()
框中的(“Cyl”)不计为单击,而我希望它计为单击。如果在selectInput()
中单击了相同的选项(例如“Trans”)不止一次,当我每次点击都要计数时,点击〉1不算点击。基本上,每当用户点击selectInput()
框时,它都需要被包括在“点击”中。有什么方法可以做到这一点吗?
在完整的代码中,这很重要,因为该框中的selectInput()
会触发removeUI()
,并且选项列表是动态的,每次单击都会按顺序重新编号。
代码:
library(shiny)
ui = fluidPage(hr(),
selectInput("selInput",label=NULL,c("Cyl"="cyl","Trans"="am","Gears"="gear"),selected=NULL),
actionButton("addBtn","Add"), hr(),
textOutput("clickSelInput"),
textOutput("clickAddBtn"),
tableOutput("data")
)
server = function(input, output) {
x = reactiveVal(0)
y = reactiveVal(0)
output$data <- renderTable({mtcars[1:10, c("mpg", input$selInput), drop = FALSE]})
observeEvent(input$selInput,{x(x()+1)})
observeEvent(input$addBtn,{y(y()+1)})
output$clickSelInput <- renderText({paste('Select Input clicks =',x()-1)})
output$clickAddBtn <- renderText({paste('Add Button clicks =',y())})
}
shinyApp(ui, server)
1条答案
按热度按时间kknvjkwl1#
在这种情况下,将“multiple = TRUE”添加到
selectInput()
解决了问题。还允许从OP中的out$selInput..x()-1)})
中删除怪异的-1\f25 -1\f6。这也适用于较大的应用程序。参见修订的OP代码,其中包含OP注解的更改(下面是“较大的应用程序”,其中此功能很重要):下面是这个功能非常重要的“大型应用程序”: