Это происходит потому, что пользовательский элемент пользовательского интерфейса перерисовывается каждый раз, когда новый элемент добавляется в список.После того, как вы нажмете «V2» и добавите новый текстовый элемент, selectInput
перерисовывается и сбрасывается до V1, что замечает созданный вами наблюдатель.
Следующее может быть решениемдля вас:
observeEvent(input$addSeg,{
new_id <- length(alld$ui) + 1
sub_name <- paste0("addSub_", new_id)
alld$ui[[new_id]] <- list(
selectInput(sub_name,
"Add a variable",
choices = c("", "V1","V2"),
selected = "")
)
observeEvent(input[[sub_name]], {
if (input[[sub_name]] == "") return()
new_text_id <- length(alld$ui[[new_id]]) + 1
alld$ui[[new_id]][[new_text_id]] <- HTML(paste0("Variable ",input[[sub_name]]," added<br>"))
}, ignoreInit = TRUE)
})
То, что я сделал здесь, это добавление пустой опции к вашим selectInput
s и условие для соответствующего наблюдателя, что он не должен ничего делать, если ввод пуст.Таким образом, я использую поведение «сброса», чтобы оно было полезным вместо раздражающего.