Shiny R: изменить цвет границы selectInput

1

Я создаю довольно реактивное приложение с несколькими переменными numericInput и некоторыми переменными selectInput.

Поскольку переменных довольно много, и они используются для оценки интервенций, я представляю цвета для обозначения тех переменных, которые отличаются от значений по умолчанию. Я уже реализовал это с помощью @BigDataScientist в этом вопросе. Представлен MWE:

library(shiny)
library(shinyjs)
ui<-shinyUI(
  fluidPage(
    useShinyjs(),
    numericInput("V1", "MyV1" , value = 5, min = 0, max= 100, step = 0.01),
    numericInput("V2", "MyV2" , value = 23, min = 0, max= 100, step = 0.01),
    selectInput("V3" , "MyV3" , selected = 1 , choices=c("Yes" = 1,"No" = 0))
  )
)
#
server<-shinyServer(function(input, output) {
  observe({
    if(!is.na(input$V1) & input$V1 != 5){color <- "solid #9999CC"}else{color <- ""}                     
    runjs(paste0("document.getElementById('V1').style.border ='", color ,"'"))
    if(!is.na(input$V2) & input$V2 != 23){color <- "solid #9999CC"}else{color <- ""}                     
    runjs(paste0("document.getElementById('V2').style.border ='", color ,"'"))
    if(!is.na(input$V3) & input$V3 != 1){color <- "solid #9999CC"}else{color <- ""}                     
    runjs(paste0("document.getElementById('V3').style.borderColor ='", color ,"'"))
    })
  })
#
shinyApp(ui,server)

Как вы можете видеть на следующем рисунке, мой код работает для числовых значений, однако это не для выбранной входной переменной (по крайней мере, в интерактивной среде).

Изображение 174551

Теперь дело не в том, что условие не работает, оно оценивается и запускается runjs.

Кроме того, как вы можете видеть в следующем фрагменте js, команда js просто прекрасна. Вероятно, есть способ сделать его реактивным (без кнопки отправки точно так же, как numericInput), который я пропускаю.

<!DOCTYPE html>
<html>
<body>



<select id="mySelect">
  <option>Apple</option>
  <option>Orange</option>
  <option>Pineapple</option>
  <option>Banana</option>
</select>

<p>Click the button to change the style of the H1 element.</p>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction() {
    document.getElementById("mySelect").style.borderColor = "red";
}
</script>

</body>
</html>

У вас есть какие-нибудь предложения?

Теги:
shiny
shinyjs
shiny-reactivity

1 ответ

1
Лучший ответ

Вам не нужно selectize.js чтобы вы могли:

selectInput("V3" , "MyV3" , selected = 1 , choices=c("Yes" = 1,"No" = 0), 
            selectize = FALSE)

Это дает "обычный" выбор.

Затем я пробовал свой код с color <- "red" и это работает.

  • 0
    так что если он не твердый и без selectize.js, он работает! ОК, спасибо большое! это также может быть: `if (! is.na (input $ V3) & input $ V3! = 1) {color <-" solid # 9999CC "} else {color <-" "} runjs (paste0 (" document. getElementById ('V3'). style.border = '", color,"' "))`

Ещё вопросы

Сообщество Overcoder
Наверх
Меню