这里有两种重置文件输入 UI 的方法(进度条和显示的名称)。第一个使用 JavaScript,第二个使用 renderUI。
这些示例包括一个“清除”按钮以及可选的下拉菜单,该菜单在选择更改时重置文件输入UI。
示例 1 - 使用 JavaScript
用户界面
shinyUI(bootstrapPage(
tags$head(
tags$style(".clearButton {float:right; font-size:12px;}")
),
headerPanel("Reset file input example"),
sidebarPanel(
HTML("<button id='clearFile1' class='action-button clearButton'>Clear</button>"),
fileInput('file1', NULL, width="80%"),
selectInput('uploadFormat', label = "Select upload format",
choices = c(
"Option 1" = 'f1',
"Option 2" = 'f2',
"Option 3" = 'f3'),
selected = 'f1')
),
mainPanel(
h4("Summary"),
verbatimTextOutput("summary")
),
singleton(includeScript("active.js"))
))
服务器.R
shinyServer(function(input, output, session) {
values <- reactiveValues(
file1 = NULL
)
observe({
input$clearFile1
input$uploadFormat
values$file1 <- NULL
})
observe({
values$file1 <- input$file1
})
output$summary <- renderText({
return(paste("Uploaded file: ", values$file1$name))
})
})
主动.js
$(document).ready(function() {
/* clear file button control */
var fileControl = $("#file1");
$("#clearFile1").on("click", function () {
fileControl.replaceWith( fileControl = fileControl.clone( true ) );
$("#file1_progress").hide();
});
$("#uploadFormat").on("change", function () {
fileControl.replaceWith( fileControl = fileControl.clone( true ) );
$("#file1_progress").hide();
});
/* file input progress bar control */
$( "#file1" ).change(function() {
document.getElementById("file1_progress").setAttribute('style', "height:20px; margin-top:5px;");
});
});
示例 2 - 使用 renderUI
同上,但 (1) 去掉 active.js 和相关的 include 语句,(2) 在 ui.R 中替换
fileInput('file1', NULL, width="80%"),
和
uiOutput('resettableInput'),
(3) 在 server.R 中添加:
output$resettableInput <- renderUI({
input$clearFile1
input$uploadFormat
fileInput('file1', NULL, width="80%")
})
请注意,此处可以将多个 UI 元素包含在 list() 语句中,并且它们都将被重新渲染。见这里。
您可以在此处和此处找到这些示例的代码,并像这样运行它们:
library(shiny)
shiny::runGist('0c2a98a0236f1257fd45')
shiny::runGist('bc09d77fa92457e094c8')