2017-10-17 28 views
1

私はいくつかの変数がnumericInputで、値がselectInputのかなり反応の良いアプリを作成しています。Shiny R:selectInputの境界線の色を変更します。

変数がかなり多く、介入を推定するために使用されるため、デフォルトと異なる変数を示すために色を導入しています。私は既にthis質問の@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) 

、しかしそれは(少なくともインタラクティブな環境上の)選択入力変数のにはありません。

My example

今では、それが評価され、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>

あなたはどんな提案を持っていますか?

答えて

1

あなたはそうあなたが行うことができますselectize.jsを必要としません:

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

これは、入力を選択し、「普通」を与えます。

次はあなたのコードをcolor <- "red"で試しましたが、これはうまくいきます。

+0

したがって、solidizeでなくselectize.jsがなければ、動作します!はい、ありがとございます! 'if(!is.na(入力$ V3)&入力$ V3!= 1){color < - " solid#9999CC "} else {color < - " "} runjs(paste0 ( "document.getElementById( 'V3')。style.border = '"、color、 "'")) ' –

関連する問題