You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Shiny的pickerInput下拉框初始不展示选项仅搜索时显示匹配结果

要实现仅输入搜索内容时才展示候选选项的需求,只需在原有代码基础上注入少量JS控制下拉展示逻辑即可,修改后的完整可运行代码如下:

library(shiny)
library(shinyWidgets)

my_autocomplete_list <- c("ICICI Prudential aaaa","ICICI Prudential bbbb","ICICI Prudential ccccc", "Tata dddd","eeee")

ui <- fluidPage(
  # 新增JS控制picker展示逻辑
  tags$script(HTML("
  $(document).on('shown.bs.select', '#fundname', function() {
    const searchInput = $(this).next().find('.bs-searchbox input');
    const optionList = $(this).next().find('.dropdown-menu.inner');
    // 展开时如果搜索框为空则隐藏选项
    if (searchInput.val().trim() === '') {
      optionList.hide();
    }
    // 监听搜索输入,动态控制选项显隐
    searchInput.on('input', function() {
      optionList.toggle($(this).val().trim() !== '');
    });
  });
  ")),
  
  sidebarLayout(
    sidebarPanel(
      pickerInput(
        inputId = "fundname",
        label = "Search Fund", 
        choices = my_autocomplete_list,
        options = list(title = "Search Fund",
                       `live-search` = TRUE)
      ),
      
      actionButton("submit", "Submit")
    ),
    
    mainPanel(
    )
  )
)

server <- function(input, output, session) { }

# Run App
shinyApp(ui = ui, server = server)

改动说明

  • 新增的JS片段基于pickerInput底层依赖的Bootstrap Select事件实现控制:
    • 监听下拉框展开事件,若此时搜索框无内容,直接隐藏候选选项列表
    • 实时监听搜索框输入状态,输入内容非空时展示匹配的候选选项,内容清空时自动隐藏选项
  • 不需要修改原有pickerInput的配置参数,也不会影响原有搜索匹配、选择的逻辑
  • 如果页面存在多个需要实现同逻辑的pickerInput,只需将JS中选择器#fundname替换为对应组件的ID即可批量适配

内容的提问来源于stack exchange,提问作者Ujjawal Bhandari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:39:00