我在下方创建了一个最小代码,以重现我在我的应用中遇到的问题。
我要做的是为多个输入调用相同的observeEvent
actionButton
中observeEvent
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
并使代码变得笨重。
请注意,这不是我在实际应用中所做的,我刚刚编写此代码来重现问题。任何帮助都非常感谢!
答案 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>