2013-10-26 13 views
23

Sto cercando un modo per implementare la funzionalità di disabilitazione/disabilitazione sui miei elementi shinyUI. Herexiaodaigh fornisce un suggerimento su come disabilitare/abilitare un actionButton (vedere un'immagine sotto) e questo è il mio risultato desiderato, ma il codice non fa il trucco con altri elementi di GUI che ho testato (ad esempio numericInput).R Shiny - disable/able elementi shinyUI

(lo so una caratteristica conditionalPanel, ma questo non è l'effetto mi piacerebbe avere.)

vivamente apprezzare qualche suggerimento, soprattutto perché non sono molto familiarità con JavaScript.

enter image description here

risposta

2

che dire quando i tuoi elementi "svaniscono" quando una certa condizione è FALSE.

Se questa è la vostra intenzione è possibile aggiungere questo nella vostra server.R

output$sliderInputUI <- renderUI({ 
    if (condition == TRUE) { 
     sliderInput("id", "text", 
      min = 1, max = 8, 
      value = 1, step = 1 
     ) 
    } 
}) 

Aggiungi questo al vostro ui.R htmlOutput ("sliderInputUI")

sliderInput apparirà solo nella tua ui quando la condizione è VERA.

+0

Come si chiama il "id" quando la condizione non è soddisfatta? Shiny sembra creare un errore quando si fa riferimento a variabili di input inesistenti. – Sweetbabyjesus

+1

Puoi usare 'if (! Is.null (input $ id))' per fare riferimento a variabili di input inesistenti. – tnaake

+0

In che modo si fa riferimento a sliderInputUI nell'interfaccia utente? Risposta: uiOutput ("sliderInputUI") – PeterVermont

27

Il motivo per cui il codice collegato alla domanda non funziona per altri widget di input è perché i diversi widget di input richiedono chiamate JavaScript diverse per disabilitarlo. Un altro problema è che quando lucida crea un elemento di input, a volte l'id che si fornisce è l'ID del tag di input HTML effettivo mentre a volte quell'ID viene assegnato a un contenitore del tag di input.

Il pacchetto shinyjs ha una funzione disable che funziona così com'è con qualsiasi input lucido. Disclaimer: ho scritto quel pacchetto.

Ecco come si potrebbe ottenere la disabilitazione di un numericInput come hai chiesto

library(shiny) 
runApp(shinyApp(
    ui = fluidPage(
    shinyjs::useShinyjs(), 
    numericInput("test", "Test", 5), 
    actionButton("submit", "Choose") 
), 
    server = function(input, output, session) { 
    observeEvent(input$submit, { 
     shinyjs::disable("test") 
    }) 
    } 
)) 
+1

questo è un ottimo pacchetto, grazie! – Cauchy

+0

C'è un modo per farlo per una scelta specifica in un widget 'selectInput()'? Seguendo le tue istruzioni, sembra che disabiliti il ​​mio widget 'radioButtons()' indipendentemente dall'opzione selezionata nel widget 'selectInput()' poiché l'input al server non è legato alle opzioni di risposta. – syntonicC

+0

Purtroppo non è possibile disabilitare/abilitare opzioni specifiche all'interno di un input. Questo è vero per le checkbox, radio, select, ecc. Semplicemente perché l'intero input ha un id, ma le opzioni specifiche non sono –