I want two different events to trigger an observer. It was suggested here that this should work. But it seems that it depends only on the second event.
observeEvent({ input$spec_button mainplot.click$click }, { ... } )
Have a look at the example.
ui <- shinyUI(bootstrapPage( actionButton("test1", "test1"), actionButton("test2", "test2")) ) server <- shinyServer(function(input, output) { observeEvent({ input$test1 input$test2 }, { print('Hello World') }) }) shinyApp(ui, server)
Once you click button test1 nothing happens. If you click button test2 it prints to your console. Once test2 button was pressed clicking test1 prints the message. That is a strange behaviour.
Another suggestion in that link was to use
list(input$test1, input$test2)
Which prints the message even without clicking the buttons.
This should do it, note that you still have to check if the buttons were clicked as mentioned by @MrFlick
#rm(list = ls()) library(shiny) ui <- shinyUI(bootstrapPage( actionButton("test1", "test1"), actionButton("test2", "test2")) ) server <- shinyServer(function(input, output) { toListen <- reactive({ list(input$test1,input$test2) }) observeEvent(toListen(), { if(input$test1==0 && input$test2==0){ return() } print('Hello World') }) }) shinyApp(ui, server)
#rm(list = ls()) library(shiny) ui <- shinyUI(bootstrapPage( actionButton("test1", "test1"), actionButton("test2", "test2")) ) server <- shinyServer(function(input, output) { observeEvent(input$test1 | input$test2, { if(input$test1==0 && input$test2==0){ return() } print('Hello World') }) }) shinyApp(ui, server)
observeEvent is a wrapper for complex observe cases. In this particular case of an action when one or other reactive value changes, one could use a simple observe. This works:
require(shiny) ui <- basicPage( actionButton("test1", "test1"), actionButton("test2", "test2") ) server <- function(input, output, session){ observe( { input$test1 input$test2 if(input$test1==0 && input$test2==0){ return() } print('Hello World') }) } shinyApp(ui, server)
There is a point in using observeEvent with options to eliminate the return() call:
ui <- basicPage( actionButton("test1", "test1"), actionButton("test2", "test2") ) server <- function(input, output, session){ observeEvent(input$test1 | input$test2, { print('Hello World') } , ignoreInit = TRUE) } shinyApp(ui, server)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With