目标是只有在ui1.R
中输入内容时才有一个闪亮的模块lsuId
激活提交按钮。当前代码没有检索到任何错误,但它似乎从不调用toggleState
。
ui.R
library(shiny)
library(shinyjs)
htmlOutput("page")
server.R
rm(list = ls())
library(shiny)
library(dplyr)
library(shinyjs)
Logged <- FALSE
shinyServer(function(input, output) {
observeEvent(input$"ui1Output-confirm", {
Logged <<- T
})
observe({
input$"ui1Output-confirm"
if (Logged == FALSE) {
output$page <- renderUI({
ui1Output('ui1Output')
})
output$lsuId <- renderText({ input$lsuId })
}
if (Logged == TRUE)
{
output$page <- renderUI({ ui2 })
}
})
callModule(ui1,'ui1')
})
ui1.R
library(shinyjs)
ui1Output <- function(id, label = "ui1") {
ns <- NS(id)
shinyUI(fluidPage(
useShinyjs(),
titlePanel("Form"),
div(textInput(ns("lsuId"), "This has to be filled", ""),
actionButton(ns("confirm"), "Submit", class = "btn-primary")
)
))
}
ui1 <- function(input, output, session) {
shinyjs::toggleState(id = "confirm", condition = F)
observeEvent(input$lsuId!="", {
shinyjs::toggleState(id = "confirm", condition = T)
})
}
ui2.R
ui2<- shinyUI(fluidPage(
div("well done!")
))
global.R
source('ui1.R') #login page
source('ui2.R')
答案 0 :(得分:3)
这是我如何处理这个问题:
ui.R
library(shiny)
shinyUI(
fluidPage(
fluidRow(column(width = 12,
align = 'center',
h1('Conditional Submit Button'))),
fluidRow(column(width = 12,
align = 'center',
textInput(inputId = 'text.field',
label = 'What is your greatest fear?',
value = ''),
uiOutput('submit.button')))
)
)
server.R
library(shiny)
shinyServer(
function(input, output) {
output$submit.button <-
renderUI(expr = if (nchar(input$text.field)) {
submitButton()
} else {
NULL
})
}
)
这种方法并没有使用shinyjs
,我认为这是一个积极的(较少的依赖),但我不知道你是否有兴趣这样做shinyjs
并未在您的问题中说明。
在这里,ui.R只有一个带有inputId textInput
的{{1}} UI元素,以及另一个UI元素将在server.R中呈现为'text.field'
的承诺。
在server.R中,如果'submit.button'
中的字符数为0,则output$submit.button
设置为NULL
,否则设置为input$text.field
。
答案 1 :(得分:0)
observe({
if (is.null(input$lsuId) || input$lsuId == "") {
shinyjs::disable("submit")
} else {
shinyjs::enable("submit")
}
})