多个输入触发相同的observeEvent不适用于modalDialog中的按钮

时间:2017-06-15 16:03:08

标签: r shiny

我在下方创建了一个最小代码,以重现我在我的应用中遇到的问题。

我要做的是为多个输入调用相同的observeEvent actionButtonobserveEvent modalDialog之一,只在函数后创建调用在observeEvent内调用的。我面临的问题是,在actionButton添加modalDialog后,使用多个输入调用observeEvent后,永远不会调用observeEvent。如果我删除此按钮,则会调用observeEvent。以下是我的代码:

  library(shiny)

  #Function called from shiny server
  func <- function(input,output){
    if(is.null(input$txt_Modal)){

      output$txt <- renderText("No Text Entered Yet!")
      showModal(modalDialog(title = "Choose Survival Time",
                            textInput(inputId = "txt_Modal", "Enter text:"),
                            easyClose = FALSE, footer = actionButton(inputId = "btn_Modal_OK","OK")))
    }else{

      output$txt <- renderText({input$txt_Modal})
    }

  }

  ##UI code
  ui <- fluidPage(

    actionButton(inputId = "btn", label = "Enter function and Print Value"),
    textOutput(outputId = "txt")

  )

  ##Server code
  server <- function(input, output, session){

    observeEvent({
      input$btn
      input$btn_Modal_OK
    },{
      func(input, output)
    })


  }
  shinyApp(ui = ui, server = server)

此处input$btn_Modal_OK是在ModalDialog中创建的按钮,该按钮是在函数func中创建的。从input$btn_Modal_OK移除observeEvent代码时,代码按预期工作。

我能想到为什么会发生这种情况的原因是因为input$btn_Modal_OK在程序开始时是NULL。我可以考虑删除此错误的一种方法是为observeEvent写一个不同的input$btn_Modal_OK但我的实际代码在我的observeEvent中有许多代码行,我不想在其中重写另一个observeEvent并使代码变得笨重。

请注意,这不是我在实际应用中所做的,我刚刚编写此代码来重现问题。任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:0)

问题在于NULL在初始化时从0切换到func并触发了模式,但您希望input$btn仅在1时触发实际上是按下,即它的值为observeEvent(c(input$btn, input$btn_Modal_OK), { validate(need(input$btn > 0, '')) func(input, output) }) 或更高。这就是解决问题的原因:

<form>
<input name="split_values[]" class="split">
<input name="split_values[]" class="split">
<input name="split_values[]" class="split">
<div class="hidden-div">
<input name="split_values[]" class="split">
</div>
</form>

this