2017-12-18 107 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,它會觸發。但那實際上是在我的問題旁邊。我希望動態添加這樣的元素,就像它預先確定的那樣起作用。 –

相關問題