В приведенном ниже приложении я не могу удалить ранее вставленный пользовательский интерфейс. Не уверен, почему. Может кто поможет................................................... .................
---
title: "Untitled"
runtime: shiny
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
---
```{r setup, include=FALSE}
library(flexdashboard)
library(rhandsontable)
```r
Column {data-width=650}
-----------------------------------------------------------------------
### Insert and Remove UI
```{r}
actionButton("add", "Add UI")
actionButton("rmv", "Remove UI")
observeEvent(input$add, {
insertUI(
selector = "#add",
where = "afterEnd",
ui = textInput(paste0("txt", input$add),
"Insert some text"),multiple = FALSE
)
})
observeEvent(input$rmv, {
removeUI(
selector = "div:has(< #txt)"
)
})
```
```
1 ответ
Мы можем получить предыдущие идентификаторы, используя seq_len(input$add)
, где input$add
равно 1,2,3,... и т. д., а затем создать jQuery с использованием paste0
и sprintf
---
title: "Untitled"
runtime: shiny
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
---
```{r setup, include=FALSE}
library(flexdashboard)
library(rhandsontable)
```
Column {data-width=650}
-----------------------------------------------------------------------
```{r}
### Insert and Remove UI
actionButton("add", "Add UI")
actionButton("rmv", "Remove UI")
observeEvent(input$add, {
insertUI(
selector = "#add",
where = "afterEnd",
ui = textInput(paste0("txt", input$add),
sprintf("Insert some text for %i",input$add)),multiple = FALSE
)
})
observeEvent(input$rmv, {
removeUI(
#Remove the last UI
#selector = sprintf("div:has(> #txt%i)",input$add),
#Remove all previous UIs
selector = sprintf("div:has(%s)",paste0('> #txt', seq_len(input$add), collapse = ",")),
immediate = TRUE,
multiple = TRUE
)
})
```
Обновить
Удаляйте последний пользовательский интерфейс каждый раз, когда пользователь нажимает Удалить пользовательский интерфейс.
### Insert and Remove UI
actionButton("add", "Add UI")
actionButton("rmv", "Remove UI")
data = reactiveValues(tmp=0)
observeEvent(input$add, {
data$tmp <- c(data$tmp,input$add)
insertUI(
selector = "#add",
where = "afterEnd",
ui = textInput(paste0("txt", input$add),
sprintf("Insert some text for %i",input$add)),multiple = FALSE
)
})
observeEvent(input$rmv, {
rm <- tail(data$tmp, 1)
data$tmp <- setdiff(data$tmp, rm)
removeUI(
#Remove the last UI
#selector = sprintf("div:has(> #txt%i)",input$add),
#Remove all previous UIs
selector = sprintf("div:has(%s)",paste0('> #txt', rm, collapse = ",")),
immediate = TRUE,
multiple = TRUE
)
})
textInput
на fileInput
, почему удаление пользовательского интерфейса не работает. Это должно работать правильно?
fileInput("file1", "Choose CSV File", accept = c( "text/csv", "text/comma-separated-values,text/plain", ".csv") )
и textInput(paste0("txt", 1), sprintf("Insert some text for %i",1))
в R.
textInput
и fileInput
имеют разные структуры HTML, как вы можете видеть, распечатывая их в консоли R. Возможно, вам следует опубликовать новый вопрос и добавить shiny
и jQuery
в качестве тегов.
Похожие вопросы
Связанные вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.