shinyUI要素の機能を無効/有効にするを実装する方法を探しています。 ここxiaodaighはactionButton
を無効/有効にする方法のヒントを提供し(以下の画像を参照)、これは私の望ましい結果ですが、コードは、私がテストした他のgui要素(例:numericInput
)でトリックを実行しません。
(私はconditionalPanel
機能を知っていますが、これは私が望む効果ではありません。)
特にJavaScript
にあまり詳しくないので、どんな提案も強く感謝します。
質問にリンクするコードが他の入力ウィジェットに対して機能しない理由は、入力ウィジェットごとに無効にするために異なるJavaScript呼び出しが必要になるためです。別の問題は、shinyがinput要素を作成するときに、提供するIDが実際のHTML入力タグのIDである場合と、そのIDがinputタグのコンテナーに与えられる場合があることです。
shinyjs パッケージには、光沢のある入力でそのまま機能するdisable
関数があります。免責事項:私はそのパッケージを書きました。
あなたが尋ねたようにnumericInput
を無効にする方法は次のとおりです
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")
})
}
))
Dean Attali によって提案されたコードは、実際にわずかに変更して、要求に応じて有効化と無効化を実現できます。以下の例を参照してください。これは、指定された値に応じてスライダーをアクティブまたは非アクティブにします(値が範囲の最大値を超える場合、スライダーは非アクティブになります)。
library(shiny)
runApp(shinyApp(
ui = fluidPage(
shinyjs::useShinyjs(),
numericInput("val", "Choose value (max 10)", 5),
sliderInput(inputId = "range",
label = "Range",
min = 0,
max = 10,
step = 0.1,
value = c(0,2))
),
server = function(input, output, session) {
observeEvent(input$val, {
if(input$val <= 10){
shinyjs::enable("range")
}else{
shinyjs::disable("range")
}
})
}
))
特定の条件がFALSEのときに要素が「消える」としたらどうでしょう。
これがあなたの意図であれば、これをサーバーに追加できます。
output$sliderInputUI <- renderUI({
if (condition == TRUE) {
sliderInput("id", "text",
min = 1, max = 8,
value = 1, step = 1
)
}
})
これをui.R htmlOutput( "sliderInputUI")に追加します
sliderInput
は、条件がTRUEの場合にのみUIに表示されます。