2015-06-30 15 views
5

keneler onay kutusu grup girişli örnek kodunuz: biz gibi birçok seçebilirsiniz yukarıdaki resimde de görebileceğiniz size şöylecheckboxGroupInput - seçimleri ayarlanan minimum ve maksimum sayı - İşte

library(shiny) 

server <- function(input, output) { 
    output$Selected <- renderText({ 
    paste(input$SelecetedVars,collapse=",") 
    }) 
} 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     checkboxGroupInput("SelecetedVars", "MyList:", 
         paste0("a",1:5), selected = "a1") 
    ), 
    mainPanel(textOutput("Selected")) 
) 
) 

shinyApp(ui = ui, server = server) 

enter image description here

İstediğimiz gibi, bu durumda 4'ten 5'e kadar.

Minimum ve maksimum keneler sayısını nasıl ayarlayabilirim? En az 1 seçenek kontrol edilmeli ve en fazla 3 seçenek kontrol edilmeli. Yani:'u en son klikleyerek 'u engelleyin ve 3 seçenek zaten işaretlendiğinde işaretini engelleyin.

cevap

6

Böyle bir şey yapabilirsiniz:

## In a file named 'js4checkbox.js' in your app folder : 
$(document).ready(function(){ 
    $('input[name=SelecetedVars]').on('click', function(event){ 
    if($('input[name=SelecetedVars]:checked').length > 3){ 
     $(this).prop('checked', false); 
    } 
    }); 
    $('input[name=SelecetedVars]').on('click', function(event){ 
    if($('input[name=SelecetedVars]:checked').length == 0){ 
     $(this).prop('checked', true); 
    } 
    }); 
}); 

Ve ui eklemedeki:

fluidPage(
    includeScript(path = "js4checkbox.js"), 
    ... 
) 

ben

rm(list = ls()) 
library(shiny) 

my_min <- 1 
my_max <- 3 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     checkboxGroupInput("SelecetedVars", "MyList:",paste0("a",1:5), selected = "a1") 
    ), 
    mainPanel(textOutput("Selected")) 
) 
) 

server <- function(input, output,session) { 
    output$Selected <- renderText({ 
    paste(input$SelecetedVars,collapse=",") 
    }) 

    observe({ 
    if(length(input$SelecetedVars) > my_max) 
    { 
     updateCheckboxGroupInput(session, "SelecetedVars", selected= tail(input$SelecetedVars,my_max)) 
    } 
    if(length(input$SelecetedVars) < my_min) 
    { 
     updateCheckboxGroupInput(session, "SelecetedVars", selected= "a1") 
    } 
    }) 
} 


shinyApp(ui = ui, server = server) 
1

Merhaba bunu yapmak için biraz JavaScript kullanabilirsiniz nedenini bilmiyorum ama RStudio Görüntüleyici'de iyi çalışmıyor, bu yüzden tarayıcınızda açın.

JS kodu için bkz. Bu post

İlgili konular