【问题标题】:How to select the text in verbatimTextOutput by default in Shiny?如何在 Shiny 中默认选择 verbatimTextOutput 中的文本?
【发布时间】:2020-02-19 18:40:39
【问题描述】:

这是与我之前的问题 (Is it possible to have fixed width verbatimTextOutput and have texts change lines in Shiny?) 相关的问题。我有以下闪亮的应用程序(https://yuchenw.shinyapps.io/Shiny_verbatimtext_fixed/)和一个可以显示长文本的verbatimTextOutput。是否可以默认选择这些文本?一个例子是书签按钮的行为。如下图所示,当书签弹出窗口出现时,文本已经被选中。我想使用verbatimTextOutput 重现相同的行为。

代码

library(shiny)

ui <- function(request){
  fluidPage(
    tags$style(type='text/css', '#txt_out {white-space: pre-wrap;}'),
    column(
      width = 6,
      textInput(inputId = "txt", label = "Type in some texts",
                value = paste0(rep(letters, 10), collapse = "")),
      strong("Show the texts"),
      verbatimTextOutput("txt_out"),
      br(),
      bookmarkButton()
    )
  )
}
server <- function(input, output, session){
  output$txt_out <- renderText({
    input$txt
  })
}
enableBookmarking("url")
shinyApp(ui, server)

【问题讨论】:

  • 您必须使用verbatimTextOutput 还是textOutput 也是一种选择? verbatimTextOutput 将文本包装在一个前置标签中,这让事情变得更加复杂。
  • @ismirsehregal 我认为textOutput 也是一种选择。但我有兴趣了解书签按钮如何实现这一点。书签按钮似乎正在使用verbatimTextOutput
  • 我目前手头没有电脑。但是,this 可能指向正确的方向。
  • @ismirsehregal 感谢您向我展示了前进的道路。我会研究一下,看看能不能给出答案。
  • 那太好了,顺便说一句,抱歉工作量太大了。 Here 你可以为textInput 找到另一种有趣的方法。

标签: html css r shiny


【解决方案1】:

感谢@ismirsehregal 的帮助。在这里,我分享了这个问题的解决方法。这个答案在只读模式下使用textAreaInput,而不是我最初要求的verbatimTextOutput。但是,我对textAreaInput 的结果和最终外观感到满意。

我根据这篇文章 (https://stackoverflow.com/a/50745110/7669809) 学会了如何选择文本。我还从这篇文章 (Make textarea readonly with jquery) 中了解了如何为textAreaInput 设置只读模式。这是我的代码。

library(shiny)

ui <- function(request){
  fluidPage(
    column(
      width = 6,
      tags$head(
        tags$script("
      Shiny.addCustomMessageHandler('selectText', function(message) {
        $('#txt_out').select();
        $('#txt_out').prop('readonly', true);
      });
    ")
      ),
      textInput(inputId = "txt", label = "Type in some texts",
                value = paste0(rep(letters, 10), collapse = "")),
      textAreaInput("txt_out", label = "Show the texts", heigh = "300px"),
      br(),
      bookmarkButton()
    )
  )
}
server <- function(input, output, session){
  observeEvent(input$txt, {
    updateTextAreaInput(session = session, inputId = "txt_out", value = input$txt)
  })
  observeEvent(input$txt_out, {
    session$sendCustomMessage("selectText", "select")
  })
}
enableBookmarking("url")
shinyApp(ui, server)

这是应用运行时的外观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多