В Shiny избегайте перекрытия раскрывающегося списка selectInput с кнопкой действия под ним.

Это кажется очень простым вопросом, но я искал и искал!

Я использую selectize для выбора нескольких элементов из списка в раскрывающемся меню selectInput. Под ним у меня есть кнопка «Отправить», чтобы выполнить какое-либо действие в списке. По мере добавления нескольких записей поле selectInput увеличивается, а кнопка динамически перемещается вниз по боковой панели, но когда вы открываете раскрывающееся меню для просмотра списка параметров, кнопка «Отправить» скрывается. Я хотел бы, чтобы кнопка динамически прыгала вниз и оставалась видимой, когда вы открываете раскрывающийся список, и, наоборот, возвращалась обратно при закрытии.

Я не могу, хоть убей ...

Я знаю, как изменить размер раскрывающегося списка по умолчанию с помощью css .selectize-dropdown-content {max-height: ...}, и я могу добавить разделитель, чтобы кнопка «Отправить» всегда была видна, но это будет потрачено впустую, когда вы ' повторный выбор предметов.

образец кода прилагается

library(shiny)
library(shinydashboard)

# long entries that will increase number of lines in the selectInput box
nonsenseWords <-  c(replicate(25,paste0(sample(letters, 10, replace=TRUE),collapse="")))

ui <-
  dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
      fluidRow(style = "margin: 1%",
        selectInput("tall_list", 
                    "Stop covering my buttons!", 
                    nonsenseWords,
                    multiple = TRUE,
                    selected=nonsenseWords[c(1,5,7,11,20)]
                   )
        # The line below puts static space between the dropdown and the submit button -- this is what I want to remove
        # ,tags$div(style = "height: 16em;")
      )
     ,fluidRow(style = "margin: 1%",
         actionButton("submit", "Submit")
      )
    ),
    dashboardBody(
      dataTableOutput("choice")
    )
  )

server <- function(input, output, session) {
  output$choice <- renderDataTable({
    req(input$submit)
    return(data.frame("Chosen Words" = c(input$tall_list)))
  })
}

shinyApp(ui, server)

person OrbitSoldier    schedule 28.02.2019    source источник


Ответы (1)


Используйте этот CSS:

dashboardBody(
  tags$head(
    tags$style(".selectize-dropdown {position: static}")
  ),
  dataTableOutput("choice")
)
person Stéphane Laurent    schedule 28.02.2019