首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shiny:使用shinyjs禁用tabPanel()

Shiny:使用shinyjs禁用tabPanel()
EN

Stack Overflow用户
提问于 2020-10-13 03:23:11
回答 1查看 613关注 0票数 3

我正在使用@SriPaladugu的答案提供的here来禁用tabPanel(),我注意到如果tabPanel(title,...)中存在空格,它将不起作用。他们编写了自己的JavaScript代码,并使用shinyjs来启用/禁用面板,而我不熟悉JavaScript代码来解决这个问题。他们执行此操作的代码存储在对象jscode中;如何修改代码以解决tabPanel(title,...)中的空格问题

代码语言:javascript
复制
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 <- shinyUI(fluidPage(
  shinyjs::useShinyjs(),
  shinyjs::extendShinyjs(text = jscode, functions = c("disableTab","enableTab")),
  shinyjs::inlineCSS(css),
  navbarPage("Test",id="navbarPage",
             tabPanel("FirstTab", id = "first_tab",
                      sidebarLayout(
                        sidebarPanel(),
                        mainPanel()
                      )
             ),
             tabPanel("Secondtab", id = "second_tab",
                      sidebarLayout(
                        sidebarPanel(),
                        mainPanel()
                      )
             ),
             tabPanel("Third tab", id = "third_tab",
                      sidebarLayout(
                        sidebarPanel(),
                        mainPanel()
                      )
             )
             )
))

server <- shinyServer(function(input, output, session) {
  # disable tabs Exposure, Covariate, and Construct on page load
  shinyjs::js$disableTab("Secondtab")
  shinyjs::js$disableTab("Third tab")
})

# Run the application
shinyApp(ui = ui, server = server)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 04:16:33

遵循this answershinyjs::disable()的文档,我认为您可以简化代码

代码语言:javascript
复制
library(shiny)
library(shinyjs)

css <- "
.nav li a.disabled {
background-color: #aaa !important;
color: #333 !important;
cursor: not-allowed !important;
border-color: #aaa !important;
}"

ui <- shinyUI(fluidPage(
  shinyjs::useShinyjs(),
  shinyjs::inlineCSS(css),
  navbarPage("Test",id="navbarPage",
             tabPanel("FirstTab", id = "first_tab",
                      sidebarLayout(
                        sidebarPanel(),
                        mainPanel()
                      )
             ),
             tabPanel("Secondtab", id = "second_tab",
                      sidebarLayout(
                        sidebarPanel(),
                        mainPanel()
                      )
             ),
             tabPanel("Third tab", id = "third_tab",
                      sidebarLayout(
                        sidebarPanel(),
                        mainPanel()
                      )
             )
  )
))

server <- shinyServer(function(input, output, session) {
  # disable tabs Exposure, Covariate, and Construct on page load
  shinyjs::disable(selector = '.navbar-nav a[data-value="Secondtab"')
  shinyjs::disable(selector = '.navbar-nav a[data-value="Third tab"')
})

# Run the application
shinyApp(ui = ui, server = server)

为了完成这个答案,要获得data-value,请在浏览器中打开应用程序,执行Ctrl+Shift+C操作,将鼠标悬停在想要的选项卡上,然后在检查器中检查其data-value参数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64324152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档