2015-03-03 13 views
5

Mam aplikację R Shiny, która zawiera checkboxGroupInput i próbuję utworzyć przycisk "select all", używając funkcji updateCheckboxGroupInput. Można zobaczyć pełny kod poniżej, ale w zasadzie ja zdefiniowane grupy cb tak:R Błyszczące pole checkboxGroupInput - zaznacz wszystkie pola wyboru, klikając

checkboxGroupInput("campaigns","Choose campaign(s):",campaigns_list) 

a następnie na kliknięcia przycisku wywołać funkcję:

updateCheckboxGroupInput(session,"campaigns","Choose campaign(s):",choices=campaigns_list,selected=campaigns_list) 

Mam informację, że funkcja została uruchomiona, ale to, co robi, to faktycznie Odznaczenie pól wyboru. BTW, kiedy umieściłem wybrane przy definiowaniu cbGroupInput to zadziałało, ale nie na funkcji.

Dzięki!

to moja server.R:

library(shiny) 
source('usefulFunctions.R') 
shinyServer(function(input, output, session) { 

    output$cascading <- renderUI({ 
    provider_id <- input$provider 
    if (provider_id == "") return(NULL) 
    campaigns_list <<- t(getCampaigns(provider_id)) 
    tagList(
     checkboxGroupInput("campaigns","Choose campaign(s):", 
         choices = campaigns_list, selected = campaigns_list), 
     actionLink("selectall","Select All") 
    ) 
    }) 

    observe({ 
    if(is.null(input$selectall)) return(NULL) 
    if (input$selectall > 0) 
    { 
     print(campaigns_list) 
     updateCheckboxGroupInput(session,"campaigns","Choose campaign(s):",choices=campaigns_list,selected=campaigns_list) 
    } 
    }) 


}) 
+0

Opcja 'biblioteki shinyWidgets' ma fajną funkcję o nazwie 'pickerInput()', która ma ładny interfejs "wybierz wszystko/anuluj wszystkie" dla wejść: https://dreamrs.github.io/shinyWidgets/index.html –

Odpowiedz

7

Dodałem również select i odznacz opcje tu o sprawdzenie, czy przycisk lub łącze jest podzielna przez 2

#rm(list = ls()) 
library(shiny) 
campaigns_list <- letters[1:10] 

ui =fluidPage(
    checkboxGroupInput("campaigns","Choose campaign(s):",campaigns_list), 
    actionLink("selectall","Select All") 
) 
server = function(input, output, session) { 

    observe({ 
    if(input$selectall == 0) return(NULL) 
    else if (input$selectall%%2 == 0) 
    { 
     updateCheckboxGroupInput(session,"campaigns","Choose campaign(s):",choices=campaigns_list) 
    } 
    else 
    { 
     updateCheckboxGroupInput(session,"campaigns","Choose campaign(s):",choices=campaigns_list,selected=campaigns_list) 
    } 
    }) 
} 
runApp(list(ui = ui, server = server)) 
2

Jeśli campaigns_list jest lista może być dlatego, że określając listę wszystkich wyborów, zamiast wartości pól, które powinny być wybrany w selected Argument twojej updateCheckboxGroupInput.

Spróbuj wymienić selected=campaigns_list przez selected=unlist(campaigns_list).

Oto przykład z nazwami manekina:

library(shiny) 
server<-function(input, output,session) { 
    observe({ 
    if(input$selectall == 0) return(NULL) 
    else if (input$selectall > 0) 
    { 
     variables<-list("Cylinders" = "cyl","Transmission" = "am","Gears" = "gear") 
     updateCheckboxGroupInput(session,"variable","Variable:",choices=variables,selected=unlist(variables)) 
    } 
    }) 
} 

ui <- shinyUI(fluidPage(  
    checkboxGroupInput("variable", "Variable:",list("Cylinders" = "cyl","Transmission" = "am","Gears" = "gear")), 
    actionButton("selectall", "Select All") 
)) 
shinyApp(ui = ui, server = server) 
+1

dodaj przycisk Unselect All dla kompletnego rozwiązanie – MySchizoBuddy

+0

zamiast obserwować użyj use observeEvent – MySchizoBuddy

Powiązane problemy