代码之家  ›  专栏  ›  技术社区  ›  emr2

如何根据屏幕上的文本输入更新SelectizeInput

  •  0
  • emr2  · 技术社区  · 3 年前

    我创建了一个包含 textInput 还有 selectizeInput 。根据用户的输入,如果可以在一个数据集中找到输入,您将看到所有的可能性 文本输入 选择输入 .

    image 1

    通过这种方式,如果用户引入的单词不在数据集中,则 选择输入 无法显示任何选择。

    image 2

    一切正常,但我发现了一个问题。如果用户开始写正确的单词,用户会得到一个下拉列表。。。然后,如果输入被删除。。。下拉列表仍然存在(来自 选择输入 仍然存在)。

    image 3

    下面是代码:

    library(shiny)
    library(dplyr)
    library(stringr)
    
    ui <- fluidPage(
      textInput("my_input", "Introduce a word"),
      selectizeInput(inputId = "dropdown_list", label = "Choose the variable:", choices=character(0)),
      
    )
    
    server <- function(input, output, session) {
      
      my_list <- reactive({
        req(input$my_input)
        data <- as.data.frame(storms)
        
        res <- subset(data, (grepl(pattern = str_to_sentence(input$my_input), data$name))) %>% 
          dplyr::select(name)
        
        res <- as.factor(res$name)
        
        
        return(res)
      })
      
      # This is to generate the choices (gene list) depending on the user's input.
      observeEvent(input$my_input, {
        updateSelectizeInput(
          session = session,
          inputId = "dropdown_list",
          choices = my_list(), options=list(maxOptions = length(my_list())),
          server = TRUE
        )
      })
    
    }
    
    shinyApp(ui, server)
    

    你知道我怎样才能从列表中删除选项吗 选择输入 如果用户删除了输入?

    非常感谢

    当做

    1 回复  |  直到 3 年前
        1
  •  2
  •   stefan    3 年前

    问题是 req(input$myinput) 。因此,如果用户删除输入 my_list() 不会得到更新。而不是 req 你可以用一个 if 要检查输入是否等于空字符串,请执行以下操作:

    my_list <- reactive({
        if (!input$my_input == "") {
          data <- as.data.frame(storms)
          
          res <- subset(data, grepl(pattern = str_to_sentence(input$my_input), data$name), name)
          
          res <- as.factor(res$name)
          
          return(res)
        } 
      })
    
    推荐文章