Mi pregunta es similar a Shiny, ¿cómo bloquear al usuario para que no acceda a una pestaña?
Pero lo que necesito aquí es: -Bloquear otras pestañas a menos que el usuario haga clic en un botón de enviar -Mover automáticamente a la otra pestaña una vez que se haga clic en ese botón de enviar. Aquí hay un código de ejemplo
library(shiny) ui <- shinyUI(navbarPage( "", tabPanel( h1("Tab1"), value = "nav1", mainPanel( br(), h2("The user must press this button to access the other tab."), br(), shiny::actionButton('button', 'press the button', onclick = "$(tab).removeClass('disabled')") ) ), tabPanel( h1("Tab2"), value = "nav2", uiOutput("tab2contents") ), tags$script( ' var tab = $(\'a[data-value="nav2"]\').parent().addClass("disabled"); $(function(){ $(tab.parent()).on("click", "li.disabled", function(e) { e.preventDefault(); return false; }); }); ' ) )) server <- shinyServer(function(input, output) { }) # Run the application shinyApp(ui = ui, server = server)En el código anterior, la segunda pestaña está bloqueada a menos que se haga clic en el botón, pero ¿cómo puedo actualizar esto aún más para que una vez que se haga clic en el botón, el usuario sea llevado automáticamente a la segunda pestaña?
Dado que coloca el tabPanel en una navbarPage , debe usar updateNavbarPage . Y debe darle a navbarPage una id .
library(shiny) ui <- shinyUI(navbarPage( "", id = "mainpage", tabPanel( h1("Tab1"), value = "nav1", mainPanel( br(), h2("The user must press this button to access the other tab."), br(), shiny::actionButton('button', 'press the button', onclick = "$(tab).removeClass('disabled')") ) ), tabPanel( h1("Tab2"), value = "nav2", uiOutput("tab2contents") ), tags$script( ' var tab = $(\'a[data-value="nav2"]\').parent().addClass("disabled"); $(function(){ $(tab.parent()).on("click", "li.disabled", function(e) { e.preventDefault(); return false; }); }); ' ) )) server <- shinyServer(function(input, output) { observeEvent(input$button, { updateNavbarPage(inputId = "mainpage", selected = "nav2") }, ignoreInit = TRUE) }) # Run the application shinyApp(ui = ui, server = server)