mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-13 00:48:09 -05:00
* update 07_widgets example * improved documentation for submitButton (including a warnign section and an full-app example) * typo * update documentation based on Winton's feedback
66 lines
2.6 KiB
R
66 lines
2.6 KiB
R
#' Create a submit button
|
|
#'
|
|
#' Create a submit button for an app. Apps that include a submit
|
|
#' button do not automatically update their outputs when inputs change,
|
|
#' rather they wait until the user explicitly clicks the submit button.
|
|
#' The use of \code{submitButton} is generally discouraged in favor of
|
|
#' the more versatile \code{\link{actionButton}} (see details below).
|
|
#'
|
|
#' Submit buttons are unusual Shiny inputs, and we recommend using
|
|
#' \code{\link{actionButton}} instead of \code{submitButton} when you
|
|
#' want to delay a reaction.
|
|
#' See \href{http://shiny.rstudio.com/articles/action-buttons.html}{this
|
|
#' article} for more information (including a demo of how to "translate"
|
|
#' code using a \code{submitButton} to code using an \code{actionButton}).
|
|
#'
|
|
#' In essence, the presence of a submit button stops all inputs from
|
|
#' sending their values automatically to the server. This means, for
|
|
#' instance, that if there are \emph{two} submit buttons in the same app,
|
|
#' clicking either one will cause all inputs in the app to send their
|
|
#' values to the server. This is probably not what you'd want, which is
|
|
#' why submit button are unwieldy for all but the simplest apps. There
|
|
#' are other problems with submit buttons: for example, dynamically
|
|
#' created submit buttons (for example, with \code{\link{renderUI}}
|
|
#' or \code{\link{insertUI}}) will not work.
|
|
#'
|
|
#' @param text Button caption
|
|
#' @param icon Optional \code{\link{icon}} to appear on the button
|
|
#' @param width The width of the button, e.g. \code{'400px'}, or \code{'100\%'};
|
|
#' see \code{\link{validateCssUnit}}.
|
|
#' @return A submit button that can be added to a UI definition.
|
|
#'
|
|
#' @family input elements
|
|
#'
|
|
#' @examples
|
|
#' if (interactive()) {
|
|
#'
|
|
#' shinyApp(
|
|
#' ui = basicPage(
|
|
#' numericInput("num", label = "Make changes", value = 1),
|
|
#' submitButton("Update View", icon("refresh")),
|
|
#' helpText("When you click the button above, you should see",
|
|
#' "the output below update to reflect the value you",
|
|
#' "entered at the top:"),
|
|
#' verbatimTextOutput("value")
|
|
#' ),
|
|
#' server = function(input, output) {
|
|
#'
|
|
#' # submit buttons do not have a value of their own,
|
|
#' # they control when the app accesses values of other widgets.
|
|
#' # input$num is the value of the number widget.
|
|
#' output$value <- renderPrint({ input$num })
|
|
#' }
|
|
#' )
|
|
#' }
|
|
#' @export
|
|
submitButton <- function(text = "Apply Changes", icon = NULL, width = NULL) {
|
|
div(
|
|
tags$button(
|
|
type="submit",
|
|
class="btn btn-primary",
|
|
style = if (!is.null(width)) paste0("width: ", validateCssUnit(width), ";"),
|
|
list(icon, text)
|
|
)
|
|
)
|
|
}
|