2017-04-21 4 views
1

Ich füge Style-Tags basierend auf den Benutzereingaben hinzu. Je nach dem vom Benutzer ausgewählten Optionsfeld ändert sich die Rahmenfarbe des selectInput. Im folgenden Beispielcode stelle ich die Farbe auf Rot ein, wenn der Benutzer den Radiotaste "Error" auswählt und ich ihn auf grau (Standardfarbe) zurückstelle, wenn der Benutzer "No Error" wählt.Entfernen Sie das von der Serverseite hinzugefügte Stil-Tag

Das Problem, mit dem ich konfrontiert bin, ist, dass jedes Mal, wenn ich mit diesen Tags die Stil-Tags zum HTML-Kopf hinzugefügt wird. Im Idealfall möchte ich das Stil-Tag entfernen, das ich zuvor hinzugefügt habe. Gibt es eine Möglichkeit, das zu tun?

Es folgt der Code, den ich zur Zeit bin mit:

library(shiny) 

    ui <- fluidPage(

    uiOutput("Border_Arg"), 

    radioButtons("RBtn", "Choices", choices = c("Error", "No Error")), 

    selectInput("Select1", "Option1", choices = NULL) 

) 


    server <- function(input, output){ 

    output$Border_Arg <- renderUI({ 

     if(input$RBtn == "Error"){ 
     tagList(
      tags$head(tags$style(HTML("#Select1 ~ .selectize-control.single .selectize-input {border: 1px solid red;}"))) 
     ) 
     }else if(input$RBtn == "No Error"){ 
     #Here, instead of setting the style to default value I would like to remove the style that was previously added 
     tagList(
     tags$head(tags$style(HTML("#Select1 ~ .selectize-control.single .selectize-input {border: 1px solid #cccccc;}"))) 
     ) 
     } 

    }) 
    } 


    shinyApp(ui = ui, server = server) 

Antwort

3

Was brauchen Sie ist eine CSS-Klasse zu tun haben, die den Stil, den Sie möchten, und dann hinzufügen und entfernen Sie die Klasse auf dem Element hinzufügen.

Wir können die shinyjs Paket verwenden dabei zu helfen:

library(shiny) 
library(shinyjs) 

ui <- fluidPage(

    useShinyjs(), 
    inlineCSS(list(.error = "border: 2px solid red")), 

    uiOutput("Border_Arg"), 

    radioButtons("RBtn", "Choices", choices = c("Error", "No Error")), 

    selectInput("Select1", "Option1", choices = LETTERS[1:4]) 

) 


server <- function(input, output){ 

    output$Border_Arg <- renderUI({ 

     if(input$RBtn == "Error"){ 
      addCssClass(class = 'error', selector = '#Select1 ~ .selectize-control.single .selectize-input') 
     }else if(input$RBtn == "No Error"){ 
      removeCssClass(class = 'error', selector = '#Select1 ~ .selectize-control.single .selectize-input') 
     } 

    }) 
} 


shinyApp(ui = ui, server = server) 
+0

Ich will nicht alle meine 'selectInput' den Fehler zeigen. Genau das, was ich gewählt habe. Dies ist nur ein Beispielcode, meine eigentliche App hat eine Menge 'selectInput'. Ich habe das in meiner Frage nicht klargestellt, dieser Code beantwortet sicherlich meine Frage.Wissen Sie einen Weg, Stil zu bestimmten 'selectInput' hinzuzufügen und ihn zu entfernen? – SBista

+0

'addCssClass' hat ein' id' Argument. Leider funktioniert es nicht mit 'Select'-Eingaben, da die ID an ein verstecktes Element des DOM angehängt ist. Sie können den Selektor verwenden, den Sie bereits haben. Aktualisierung der Antwort – GGamba

+0

Vielen Dank. Genau das wollte ich. – SBista

Verwandte Themen