【发布时间】:2021-06-27 22:27:00
【问题描述】:
我有下面闪亮的应用程序,用户在其中登陆Upload data 面板。如果用户没有上传Upload data 选项卡中需要的两个文件,我希望用户不能移动到其他 2 个tabpanels。这里的问题是,我希望仅当 csv 名称是特定的时才激活两个选项卡。例如,在第一个或第二个fileInput() 中导入的 csv 应命名为 csvone,而在第一个或第二个 fileInput() 中导入的 csv 应命名为 csvtwo。但是无论哪个是第一个,都应该上传两个文件。
library(shiny)
library(shinyjs)
jscode <- "
shinyjs.disableTab = function(name) {
var tab = $('.nav li a[data-value=' + name + ']');
tab.bind('click.tab', function(e) {
e.preventDefault();
return false;
});
tab.addClass('disabled');
}
shinyjs.enableTab = function(name) {
var tab = $('.nav li a[data-value=' + name + ']');
tab.unbind('click.tab');
tab.removeClass('disabled');
}
"
css <- "
.nav li a.disabled {
background-color: #aaa !important;
color: #333 !important;
cursor: not-allowed !important;
border-color: #aaa !important;
}"
#ui.r
ui <- fluidPage(
useShinyjs(),
extendShinyjs(text = jscode, functions = c("disableTab","enableTab")),
inlineCSS(css),
# App title ----
titlePanel("Tabsets"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
),
# Main panel for displaying outputs ----
mainPanel(
tabsetPanel( id="tabset",
tabPanel("Upload data", value="tab0",
fileInput("file1", "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")),
fileInput("file2", "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv"))),
tabPanel("Resource Allocation", value="tab1"),
tabPanel("Time Series", value="tab2")
)
)
)
)
#server.r
server = function(input, output) {
print("test")
js$disableTab("tab1")
js$disableTab("tab2")
observe({
req(input$file1, input$file2)
js$enableTab("tab1")
js$enableTab("tab2")
})
}
shinyApp(ui, server)
【问题讨论】:
标签: javascript html css r shiny