2

光沢のあるアプリには次の要素があります。

  • numericInput0 ~ 3 の値を持つ1 つのフィールド
  • 3つuiOutputの隠しtextInputフィールドを含むもの
  • 1actionButton

私が達成したいのは、ボタンをクリックした後showの非表示フィールドです。textInput表示されるフィールドの数は、フィールドで選択された数によって異なります。以下numericInput完全に機能するコードは、それを行うことに成功しています。ただし、解決策が見つからないように見える問題があります。たとえば3、ボタンを選択してクリックすると、3 つの非表示textInputフィールドが表示されますが (イェーイ!)、すぐにそれよりも小さい数値を選択し3てボタンをクリックすると、不要なフィールドが残ります。どうすればそれを達成できますか?ありがとう

library(shiny)
library(shinyjs)

ui <- fluidPage(

  useShinyjs(),

  numericInput(inputId = "num", label = "How many inputs do you want to show?", value = 1, min = 1, max = 3),

  uiOutput(outputId = "out"),

  actionButton(inputId = "go", label = "Click me!")
)

server <- function(input, output){

  output$out <- renderUI({
    numinputs <- lapply(1:3, function(i){
      textInput(inputId = paste0("txt", i), label = paste0("Text input ", i))
    })
    shinyjs::hidden(numinputs)
  })

  observeEvent(eventExpr = input$go, handlerExpr = {
    for(i in seq(input$num)){
      shinyjs::show(id = paste0("txt", i))
    }
  })
}

shinyApp(ui = ui, server = server)
4

2 に答える 2

1

このコードは @SBista のものに似ていますが、nout変数がありません。

library(shiny)
library(shinyjs)

ui <- fluidPage(
    
    useShinyjs(),
    
    numericInput(inputId = "num", label = "How many inputs do you want to show?", value = 1, min = 1, max = 3),
    
    uiOutput(outputId = "out"),
    
    actionButton(inputId = "go", label = "Click me!")
)

server <- function(input, output){
    output$out <- renderUI({
        numinputs <- lapply(1:3, function(i){
            textInput(inputId = paste0("txt", i), label = paste0("Text input ", i))
        })
        shinyjs::hidden(numinputs)
    })
    
    observeEvent(eventExpr = input$go, handlerExpr = {
        n <- seq(length.out = as.numeric(input$num))
        lapply(seq(3), function(i) {
            if(i %in% n) {
                shinyjs::show(id = paste0("txt", i))
            } else{
                shinyjs::hide(id = paste0("txt", i))
            }
        })
    })
}

shinyApp(ui = ui, server = server)

#edit - Shinyjs/動的作成なし

# if you comment the lines marked with # no-button
# the app will change the number of textInputs as soon as you change the numericInput
library(shiny)

ui <- fluidPage(
    numericInput(inputId = "num", label = "How many inputs do you want to show?", value = 1, min = 1, max = 3),
    uiOutput(outputId = "out"),
    actionButton(inputId = "go", label = "Click me!") # no-button
)

server <- function(input, output){
    output$out <- renderUI({
        input$go # no-button
        isolate( # no-button
            numinputs <- lapply(seq(length.out = req(input$num)), function(i){
                textInput(inputId = paste0("txt", i), label = paste0("Text input ", i))
            })
        ) # no-button
    })
}

shinyApp(ui = ui, server = server)
于 2016-11-18T12:55:15.380 に答える