2017-12-18 146 views
1

当动态输入元素添加到UI时,它将触发其已存在的observeEvent。具体来说,请参见下面的示例,其中textInput是在服务器端函数的第一次加载时动态添加的。然后当它呈现时,将触发observeEvent。如何避免运行动态添加输入的初始观察事件

有没有一种方法可以在一般情况下避免添加输入元素的这种触发,特别是我希望以类似的方式测试输入1和测试输入2两个火,即不是在启动时。

的UI.R文件

library(shiny) 

# Define UI for application that draws a histogram 
shinyUI(fluidPage(

fluidRow(
    uiOutput("my_output"), 
    textInput(inputId = "test2", label = "test2", value = "start value")) 

)) 

的server.R文件

library(shiny) 

first.load <- TRUE 
shinyServer(function(input, output) { 

    if(first.load){ 
    output$my_output <- renderUI({ 
     textInput(inputId = "test", label = "test", value = NULL) 
    }) 
    } 

    observeEvent(input$test2,{ 
    browser() 
    }, ignoreInit = T) 

    observeEvent(input$test, { 
    browser() 
    }, ignoreInit = T) 
}) 
+0

有同样的问题一次,与创建输入一些JavaScript。 – agenis

回答

0

obServeEvent被反应的input$test的存在。所以当它初始化为value = ""时,observeEvent将会启动,因为""仍然是非空值。作为一个快速修复你可以在一个逻辑包住observeEvent只运行,如果input$test不等于""

observeEvent(input$test, { 
    if (!input$test == ""){ 
     browser() 
    } 
    }, ignoreInit = T) 
}) 
+0

即使我没有提供它的价值,或提供它NULL,它会触发。但那实际上是在我的问题旁边。我希望动态添加这样的元素,就像它预先确定的那样起作用。 –

相关问题