【问题标题】:Disable walking between tabs Shiny禁用在选项卡之间行走
【发布时间】:2018-08-25 03:52:44
【问题描述】:

我有几个选项卡的闪亮应用程序。 问题是我想用按钮在选项卡之间走动,而不是通过单击选项卡。如何禁用单击选项卡? 代码小例子:

ui <- navbarPage('Test App', id = "inTabset",
                 tabPanel(title = "Panel 1", value = "panel1", 
                          actionButton('jumpToP2', 'Jump to Secon Tab')),
                 tabPanel(title = "Panel 2", value = "panel2", 
                          actionButton('jumpToP1', 'Jump to First Tab'))
)

server <- function(input, output, session) {
  observeEvent(input$jumpToP2, {
    updateTabsetPanel(session, "inTabset",
                      selected = "panel2")
  })

  observeEvent(input$jumpToP1, {
    updateTabsetPanel(session, "inTabset",
                      selected = "panel1")
  })

}

shinyApp(ui, server)

【问题讨论】:

    标签: r tabs shiny switching shinyjs


    【解决方案1】:

    这是一个可能的解决方法。我们可以使用shinyjs 来禁用navbar 按钮,并添加一些CSS 以将光标悬停在导航栏时更改为默认值。

    可能有我不知道的更简单的方法,所以我很想看看其他可能的解决方法:) 希望这会有所帮助!

    library(shiny)
    library(shinyjs)
    
    ui <- navbarPage('Test App', id = "inTabset",
                     tabPanel(title = "Panel 1", value = "panel1", 
                              actionButton('jumpToP2', 'Jump to Secon Tab')),
                     tabPanel(title = "Panel 2", value = "panel2", 
                              actionButton('jumpToP1', 'Jump to First Tab')),
                     useShinyjs(),
                     tags$head(tags$style(HTML('.navbar-nav a {cursor: default}')))
    )
    
    server <- function(input, output, session) {
    
      shinyjs::disable(selector = '.navbar-nav a')
    
      observeEvent(input$jumpToP2, {
        updateTabsetPanel(session, "inTabset",
                          selected = "panel2")
      })
    
      observeEvent(input$jumpToP1, {
        updateTabsetPanel(session, "inTabset",
                          selected = "panel1")
      })
    
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 非常感谢!然而,这在几个方面都是非常有趣的问题。例如,在没有按钮的情况下(从 tab2 到 tab1),我怎么能在返回的选项卡之间走动,但在前面我必须按下按钮(从 tab1 到 tab2)?希望我也能找到这个问题的答案^_^
    • 嗨@Lesley,有多种方法可以做到这一点,例如here。如果您的标签已编号,您也可以执行observeEvent(input$btn_next, {selected = as.numeric(gsub("[^\\d]+", "", input$sidebar, perl=TRUE));updateTabItems(session, 'sidebar', paste0('panel',selected+1))}) 之类的操作,但这听起来像是另一个问题,所以如果它解决了当前问题,请考虑接受这个答案,如果您有后续问题,请打开一个新问题。谢谢!
    猜你喜欢
    • 2016-03-13
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2013-07-21
    • 2023-03-13
    相关资源
    最近更新 更多