导航栏按钮在 Shiny 中单击时不起作用

Posted

技术标签:

【中文标题】导航栏按钮在 Shiny 中单击时不起作用【英文标题】:a navbar button doesn't work on click in Shiny 【发布时间】:2021-08-20 16:21:12 【问题描述】:

我想在导航栏上放置一个电子邮件按钮。我查看了 *** 和网络,但除此之外我找不到任何可靠的东西-Add action button on the right side of navbar page。我得到的最接近的方法是使用 fluidRrow 和列放置,但在我的实际应用中看起来很麻烦。

目前,我已将按钮放置在我想要的位置,但是它没有反应。我知道我可以在ui.R-

中使用它
a(actionButton(inputId = "an_email", label = "Contact", 
                                icon = icon("envelope", lib = "font-awesome")),
                   href="mailto:xyz@email.us")

但不确定如何接受这个想法并前往server.R,如果有人可以帮助我,我将不胜感激。

library(shiny)
# library(markdown)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  navbarPage("Navbar!",
                 tabPanel("Plot"
                 ),
                 tags$script(
                   html("var header = $('.navbar > .container-fluid');
                              header.append('<div style=\"float:right; padding-top: 8px\"><button id=\"sendemail\" type=\"button\" class=\"btn btn-primary action-button\" onclick=\"sendEmail()\">Contact</button></div>')")
                 )
  )

)


server <- function(input, output, session) 
  
  # not sure if I need an obserEvent here
  observeEvent(input$sendemail,cat("contact envoked"))
  
  onclick("sendemail", runjs("window.open('mailto:xyz@email.us')"))
  
  # Tried this approach also
  #onclick("sendemail", runjs("function sendEmail() 
  #  var link = 'mailto:me@example.com';
  #  window.location.href = link;"))
  #


runApp(shinyApp(ui= ui, server= server))

【问题讨论】:

【参考方案1】:

当我在 EDGE 中查看您的示例时,它实际上正在工作(在 Firefox 中,弹出窗口被阻止,而在 RStudio 中它不工作)。但是,您不需要服务器部分。您可以将按钮包装在 &lt;a href="mailto:xyz@email.us"&gt;...&lt;/a&gt; 中。

library(shiny)
library(shinyjs)

shinyApp(ui = fluidPage(
  useShinyjs(),
  navbarPage("Navbar!",
             tabPanel("Plot"),
             tags$script(
               HTML("var header = $('.navbar > .container-fluid');
                              header.append('<div style=\"float:right; padding-top: 8px\"><a href=\"mailto:xyz@email.us\"><button id=\"sendemail\" type=\"button\" class=\"btn btn-primary action-button\">Contact</button></a></div>')")
             )
  )), 
  
  server = function(input, output, session) 
  # no server part needed
)

【讨论】:

感谢您的宝贵时间。如果您不介意,请快速提问,为什么它不能在 RStudio 上运行?它不会在运行时创建本地服务器/浏览器,因此它应该打开默认应用程序电子邮件应用程序,不是吗?我还是 Shiny 的新手,所以很抱歉,不是想听起来很聪明。 我不确定 RStudio 在后台使用的是什么,但建议在主要浏览器之一(Chrome、Firefox、Safari)中预览仪表板。 RStudio 支持的功能越来越多,但归根结底,它并不是一个成熟的网络浏览器。 明白了。再次感谢朋友的回答。 1000X 谢谢!保重。

以上是关于导航栏按钮在 Shiny 中单击时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

单击时使用 data-toggle="offcanvas" 关闭导航栏不起作用

$.getJSON 请求在按钮单击时不起作用

CSS过渡第一次不起作用

切换按钮在引导程序4中不起作用,而角度7应用程序在导航栏中不起作用

单击导航栏链接时jQuery对话框不起作用