2017-02-20 22 views
0

Я хотел бы удалить начальное значение (selected=) с selectizeInput, когда пользователь нажмет на виджет.Shiny selectizeInput: по щелчку удалить начальное выбранное значение

Вот пример кода:

library(shiny) 
library(dplyr) 

ui= fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectizeInput(inputId= "cyl", label= "cyl", 
        choices= NULL, 
        selected= sort(unique(mtcars$cyl))[1], 
        multiple=T) 
    ), 
    mainPanel(
     tableOutput("tab") 
    ) 
) 
) 

server= function(input, output,session) { 

    updateSelectizeInput(session = session,inputId ="cyl",choices=sort(unique(mtcars$cyl)),selected=sort(unique(mtcars$cyl))[1], server = TRUE) 

    df_filtered= reactive({ 
    mtcars %>% 
    {if (is.null(input$cyl)) . else filter(., cyl %in% input$cyl)} 
    }) 
    output$tab= renderTable(df_filtered()) 
} 

shinyApp(ui, server) 

Просто немного объяснения на основе образца кода:

Начальное выбранное значение в selectizeInput "cyl" является 4. Когда пользователь нажимает на этот виджет, мне бы хотелось, чтобы значение 4было удалено, а опция selected очищена. Есть идеи?

* Я использовал функцию updateSelectizeInput в server, потому что в моем выборе shiny app выбор очень большой приводит к слишком много времени загрузки

ответ

2

Вы можете использовать shinyjs::onclick вызвать updateSelectizeInput, когда пользователь нажимает на поле selectize, например:

library(shiny) 
library(dplyr) 
library(shinyjs) 

ui= fluidPage(
    useShinyjs(), 
    sidebarLayout(
    sidebarPanel(
     selectizeInput(inputId= "cyl", label= "cyl", 
        choices= NULL, 
        selected= sort(unique(mtcars$cyl))[1], 
        multiple=T) 
    ), 
    mainPanel(
     tableOutput("tab") 
    ) 
) 
) 

server= function(input, output,session) { 

    updateSelectizeInput(session = session,inputId ="cyl",choices=sort(unique(mtcars$cyl)),selected=sort(unique(mtcars$cyl))[1], server = TRUE) 

    df_filtered= reactive({ 
    mtcars %>% 
    {if (is.null(input$cyl)) . else filter(., cyl %in% input$cyl)} 
    }) 
    output$tab= renderTable(df_filtered()) 

    onclick("cyl", { 
    updateSelectizeInput(session, "cyl", selected = "") 
    }) 
} 

shinyApp(ui, server) 

 Смежные вопросы

  • Нет связанных вопросов^_^