Set up a shiny::observeEvent() observer to trigger when the named input
loses focus.
Usage
on_blur(
id,
handler_expr,
...,
priority = 99999,
session = shiny::getDefaultReactiveDomain()
)Arguments
- id
The ID string of an input.
- handler_expr
The expression to trigger whenever the specified input loses focus. This expression is quoted and executed in the calling environment.
- ...
Arguments passed on to
shiny::observeEventlabelA label for the observer or reactive, useful for debugging.
suspendedIf
TRUE, start the observer in a suspended state. IfFALSE(the default), start in a non-suspended state.autoDestroyIf
TRUE(the default), the observer will be automatically destroyed when its domain (if any) ends.ignoreNULLWhether the action should be triggered (or value calculated, in the case of
eventReactive) when the input event expression isNULL. See Details.onceWhether this
observeEventshould be immediately destroyed after the first time that the code inhandlerExpris run. This pattern is useful when you want to subscribe to a event that should only happen once.
- priority
An integer that controls the priority with which the observer should be executed. It often makes sense for this priority to be very high to avoid conflicts.
- session
The session (aka domain) in which the observer will be created and executed. The default is almost always desired.
Value
A shiny observer (see shiny::observe()).
See also
Other observers:
on_focus_change(),
on_focus()
Examples
## Only run examples in interactive R sessions
if (interactive()) {
# App 1: A relatively simple ui without modules.
shiny::shinyApp(
ui = shiny::fluidPage(
shinyfocus_js_dependency(),
shiny::textInput("input1", "Input 1"),
shiny::textInput("input2", "Input 2"),
shiny::actionButton("go_button", "Go!"),
shiny::textOutput("blurring")
),
server = function(input, output, session) {
# Update the value in blurring whenever input1 loses focus.
on_blur(
"input1",
output$blurring <- shiny::renderText(
paste(
"You left input1 at",
Sys.time()
)
)
)
}
)
# App 2: With module.
blurUI <- function(id) {
shiny::tagList(
shiny::textInput(shiny::NS(id, "observe_me"), "Observe me"),
shiny::textOutput(NS(id, "blurring"))
)
}
blurServer <- function(id) {
shiny::moduleServer(id, function(input, output, session) {
on_blur(
"observe_me",
output$blurring <- shiny::renderText(
paste(
"You left observe_me at",
Sys.time()
)
)
)
})
}
shiny::shinyApp(
ui = shiny::fluidPage(
shinyfocus_js_dependency(),
blurUI("blur_module"),
shiny::textInput("another_input", "Another input"),
shiny::actionButton("go_button", "Go!")
),
server = function(input, output, session) {
blurServer("blur_module")
}
)
}