我有一个带文字输入框的闪亮应用程序。我想限制可以输入的字符数,并在框下方显示一个注释,说明剩余多少个字符。我不确定如何防止输入的字符超过限制。我下面的代码,如果有效,只会显示剩余的字符数,但没有什么可以阻止它消极。
作为一个不太优选的解决方案,如果单击操作按钮并且输入框超过字符限制,我试图弹出一个模态框,但我无法使其工作。< / p>
ui <- fluidPage(title = "App Title",
dashboardPage(title = "App Title",
dashboardBody(tabItems(tabItem(tabName = 'Tab1',
fluidRow(uiOutput('comment_UI'),
actionButton('upload_comment', 'Upload Comment')
),
helpText(paste0('Characters remaining:', textOutput('charcount')))
)
)
)
)
)
server <- function(input, output, session) {
output$comment_UI <- renderUI({textareaInput('comment','Comment')})
output$charcount <- renderText({800-nchar(input$comment)})
observeEvent(input$upload_comment, {
if(nchar(input$comment) <= 800) {
[do stuff] }
else {
showModal(modalDialog(title = "Error",
"The character limit has been exceeded.")) }
}
}
答案 0 :(得分:2)
我在下面创建了一个没有javascript的解决方案,但它实际上更简单;与往常一样,shinyjs包可以大大简化:How to limit the number of characters accepted by textInput in Shiny app。在你的情况下。将shinyjs::runjs("$('#mytext').attr('maxlength',8)")
添加到您的服务器。请注意,您应该将行library(shinyjs)
和useShinyjs()
放在您的ui中,以便工作。
这是一个可能的解决方案,它使用您在解决方案中执行的observeEvent。每当使用超过字符限制时,观察者将输入重置为最大字符限制,弹出模态对话框,通知用户错误。
请注意,如果用户快速输入,用户仍可以输入15个字符。我认为使用一些自定义的javascript可以获得更好的解决方案,但我不是那方面的专家。希望这有帮助!
library(shiny)
ui <- fluidPage(title = "App Title",
textInput("mytext","Input text:"),
textOutput('helptext')
)
max_char = 10
server <- function(input, output, session)
{
output$helptext <- reactive({ paste0('only ', max_char-nchar(input$mytext), ' characters remaining.' ) })
observeEvent(input$mytext,{
if(nchar(input$mytext)>max_char)
{
updateTextInput(session,'mytext',value=substr(input$mytext,1,max_char))
showModal(modalDialog(
title = "Error!",
"Character limit exceeded!",
easyClose = TRUE
))
}
}
)
}
shinyApp(ui,server)