在R Shiny模态窗口中如何仅禁用单个输入组件?
实现编辑模式下文本输入框不可编辑的方案
要实现点击“Edit Data”时textInput可见但不可编辑,仅允许修改numericInput,可以通过以下两步调整代码:
- 在编辑模态框的
textInput中添加disabled = TRUE参数,禁用输入功能 - 调整更新逻辑,不再从输入框读取文本内容(避免无意义的赋值)
修改后的完整代码如下:
library(shiny) ui <- fluidPage( titlePanel("Example Shiny App"), sidebarLayout( sidebarPanel( actionButton("add_data_btn", "Add Data"), actionButton("edit_data_btn", "Edit Data") ), mainPanel( textOutput("text_output"), textOutput("numeric_output") ) ) ) server <- function(input, output, session) { saved_text <- reactiveVal(NULL) saved_numeric <- reactiveVal(NULL) observeEvent(input$add_data_btn, { showModal(modalDialog( textInput(inputId = "text_input", label = "Enter Text"), numericInput(inputId = "numeric_input", label = "Enter Number 1-10", value = 1, min = 1, max = 10), footer = tagList( actionButton("save_btn", "Save") ) )) }) observeEvent(input$save_btn, { saved_text(input$text_input) saved_numeric(input$numeric_input) removeModal() }) observeEvent(input$edit_data_btn, { showModal(modalDialog( # 添加disabled = TRUE禁用文本输入框 textInput("text_input", "Enter Text", value = saved_text(), disabled = TRUE), numericInput("numeric_input", "Enter Number 1-10", value = saved_numeric(), min = 1, max = 10), footer = tagList( actionButton("update_btn", "Update Data") ) )) }) observeEvent(input$update_btn, { # 不再更新saved_text,仅更新数值内容 saved_numeric(input$numeric_input) removeModal() }) output$text_output <- renderText({ saved_text() }) output$numeric_output <- renderText({ saved_numeric() }) } shinyApp(ui, server)
补充说明
如果你的Shiny版本较旧(低于1.6.0),textInput可能不支持disabled参数,此时可以用tags$input手动构建禁用的文本框:
tags$input(type = "text", class = "form-control", id = "text_input", value = saved_text(), disabled = "disabled")
内容的提问来源于stack exchange,提问作者Harry Kalsted
相关产品推荐
相关产品推荐

