formInput.RdForm inputs are a new reactive input. Form inputs are an alternative to shiny's submit buttons. A form input is comprised of any number of inputs. The value of these inputs will not change until a form submit button within the form input is clicked. A form input's reactive value depends on the clicked form submit button. This allows you to distinguish between different form submission types, think "login" versus "register".
A form submit button, formSubmit(), is a special type of button used to
control form input submission. A form input and its child reactive inputs
will never update if a form submit button is not included in ... passed
to formInput().
formInput(id, ..., inline = FALSE) formSubmit(label, value = label, ...) updateFormInput(id, submit = FALSE, session = getDefaultReactiveDomain())
| id | A character string specifying the id of the reactive input. |
|---|---|
| ... | Any number of unnamed arguments passed as child elements to the
parent form element or named arguments passed as HTML attributes to the
parent element. At least one |
| inline | One of |
| label | A character string specifying the label of the form submit button. |
| value | A character string specifying the value of the form submit
button and the value of the form input when the button is clicked,
defaults to |
| submit | One of |
| session | A reactive context, defaults to |
When inline is TRUE you may want to adjust the right margin of each child
element for viewports larger than mobile, margin(<TAG>, right = c(sm = 2)),
see margin(). You only need to apply extra space for larger viewports
because inline forms do not take effect on small viewports.
Use updateFormInput() to submit a form input. This will cause all the form's
child inputs to update.
ui <- container(
formInput(
id = "login",
formGroup(
label = "Username",
textInput(
id = "user"
)
),
formGroup(
label = "Password",
textInput(
type = "password",
id = "pass"
)
),
formSubmit(
label = "Login",
value = "login"
)
)
)
server <- function(input, output) {
# Will not react until the form submit button is
# clicked.
observe({
print(input$email)
print(input$password)
})
}
shinyApp(ui, server)
Other inputs:
buttonGroupInput(),
buttonInput(),
checkbarInput(),
checkboxInput(),
chipInput(),
fileInput(),
listGroupInput(),
menuInput(),
navInput(),
radioInput(),
radiobarInput(),
rangeInput(),
selectInput(),
textInput()
### A simple form card( header = "Please pick a flavor", formInput( id = "form1", formGroup( label = "Ice creams", radioInput( id = "flavor", choices = c("Mint", "Moose tracks", "Marble"), ) ), formSubmit("Make choice", "choice") %>% background("teal") ) ) %>% border("teal") %>% width(50)#> <div class="card border border-teal w-50"> #> <div class="card-header">Please pick a flavor</div> #> <div class="card-body"> #> <form class="yonder-form" id="form1"> #> <div class="form-group"> #> <label>Ice creams</label> #> <div class="yonder-radio" id="flavor"> #> <div class="custom-control custom-radio"> #> <input class="custom-control-input" type="radio" id="radio-300-957" name="flavor" value="Mint" checked autocomplete="off"/> #> <label class="custom-control-label" for="radio-300-957">Mint</label> #> </div> #> <div class="custom-control custom-radio"> #> <input class="custom-control-input" type="radio" id="radio-546-70" name="flavor" value="Moose tracks" autocomplete="off"/> #> <label class="custom-control-label" for="radio-546-70">Moose tracks</label> #> </div> #> <div class="custom-control custom-radio"> #> <input class="custom-control-input" type="radio" id="radio-447-260" name="flavor" value="Marble" autocomplete="off"/> #> <label class="custom-control-label" for="radio-447-260">Marble</label> #> <div class="valid-feedback"></div> #> <div class="invalid-feedback"></div> #> </div> #> </div> #> </div> #> <button class="yonder-form-submit btn btn-teal" value="choice">Make choice</button> #> </form> #> </div> #> </div>