【问题标题】:Shiny - textInput闪亮 - textInput
【发布时间】:2016-09-22 15:49:42
【问题描述】:

在使用类似于闪亮选择输入选项的闪亮文本输入时,有什么方法可以提供可用选项?

也就是说,如果用户键入一个字母或字符,则必须提供该字母或字符内的所有可用选项。由于我有很多选择,因此 selectinput 会变慢,而不是输入的好选择。因此,我选择 textInput。

任何建议都会有所帮助!

谢谢

【问题讨论】:

  • 可能 selectize 是你需要的:shiny.rstudio.com/articles/selectize.html
  • question 的答案可能对您有所帮助
  • 澄清一些混淆:默认情况下,selectInput() 和 selectizeInput() 使用 JavaScript 库 selectize.js。除非您使用 selectize=FALSE 在 selectInput() 上专门选择基本输入。所以每个人都在谈论selectize 的不同模式。见galleryreference

标签: r shiny


【解决方案1】:

您可以将 selectInput 与参数 multiple = TRUE 一起使用

selectInput(inputId, label, choices, multiple = TRUE)

这将输出一个文本框而不是下拉菜单,并且当用户开始输入字母中的所有可用选项时,将被过滤掉。

Create a select list input control

Example

【讨论】:

    【解决方案2】:

    使用 DT,您可以做一些花哨的事情。以下是一个示例,其中表格列出了包含您键入的文本的所有选项。如果单击表格单元格,则文本输入将使用表格单元格的文本进行更新。您也可以使用表格的搜索字段。

    library(shiny)
    
    shinyApp(
      ui = fluidPage(textInput("text", "Please input text:"),
                     DT::dataTableOutput('tbl')),
    
      server = function(session, input, output) {
    
        # all your choices for the textfield go into "text" column
        allData <- data.frame(ID = '', text = c(paste0("Text",1:50)))
    
        # table with only the texts that contain input$text
        output$tbl = DT::renderDataTable(
          allData[grep(input$text, allData$text), ],
          selection = 'none',
          rownames = FALSE,
          options = list(searchHighlight=T)
        )
    
        # fill textInput after Click in Table
        observeEvent(input$tbl_cell_clicked, {
          info <- input$tbl_cell_clicked
    
          if (is.null(info$value) || info$col != 1) return()
          else {
           updateTextInput(session, "text", value = info$value)
          }
        })
      }
    )
    

    【讨论】:

      【解决方案3】:

      selectinput 有点慢,不是输入的好选择

      selectInput 多选是这种情况下的最佳选择。通过将selectInput 移动到服务器可以轻松管理缓慢的加载。

      只需输入ui.R:

      selectizeInput(inputId=..., label=..., choices = NULL, multiple = TRUE)
      

      server.R:

      server <-  function(input, output, session) {
          updateSelectizeInput(session = session,inputId =...,choices=..., server = TRUE)}
      

      现在您应该没有任何加载缓慢的问题。

      【讨论】:

        猜你喜欢
        • 2016-04-09
        • 2021-06-15
        • 2021-04-10
        • 2020-05-22
        • 2018-11-17
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多