如何在R中的Shiny webapp中创建TextArea作为输入?

Chi*_*til 31 textarea r textinput shiny

我正在尝试创建简单的webapp,我想使用HTML textarea控件从用户那里获取多行输入.有没有开箱即用的方式在Shiny中创建这样的输入控件?

textInput的帮助页面没有显示太多选项

textInput {shiny}   R Documentation
Create a text input control

Description

Create an input control for entry of unstructured text values

Usage

  textInput(inputId, label, value = "")
Arguments

inputId 
Input variable to assign the control's value to

label   
Display label for the control

value   
Initial value

Value

A text input control that can be added to a UI definition.

Examples

textInput("caption", "Caption:", "Data Summary")
Run Code Online (Sandbox Code Playgroud)

Joe*_*eng 40

您可以使用添加textarea tags,它应该由Shiny自动拾取:

tags$textarea(id="foo", rows=3, cols=40, "Default value")
Run Code Online (Sandbox Code Playgroud)

或者,如果您对直接HTML更加满意,您也可以这样做

HTML('<textarea id="foo" rows="3" cols="40">Default value</textarea>')
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,input$foo都应该反映textarea的价值.

  • 是否有一种简单的方法可以像`textInput`那样在`textarea`中添加标签? (3认同)

Chi*_*til 26

为了其他人的利益,我将发布如何使用Shiny教程后的自定义UI控件解决问题

首先,我创建了textarea.js文件,如下所示

$(document).on("click", "textarea.inputTextarea", function(evt) {

  // evt.target is the button that was clicked
  var el = $(evt.target);

  // Raise an event to signal that the value changed
  el.trigger("change");
});

var inputTextareaBinding = new Shiny.InputBinding();
$.extend(inputTextareaBinding, {
  find: function(scope) {
    return $(scope).find(".inputTextarea");
  },
  getValue: function(el) {
    return $(el).text();
  },
  setValue: function(el, value) {
    $(el).text(value);
  },
  subscribe: function(el, callback) {
    $(el).on("change.inputTextareaBinding", function(e) {
      callback();
    });
  },
  unsubscribe: function(el) {
    $(el).off(".inputTextareaBinding");
  }
});

Shiny.inputBindings.register(inputTextareaBinding);
Run Code Online (Sandbox Code Playgroud)

然后,在调用shinyUI()之前,我在发光的webapp的ui.R中添加了以下函数

inputTextarea <- function(inputId, value="", nrows, ncols) {
    tagList(
        singleton(tags$head(tags$script(src = "textarea.js"))),
        tags$textarea(id = inputId,
                    class = "inputtextarea",
                    rows = nrows,
                    cols = ncols,
                    as.character(value))
    )
}
Run Code Online (Sandbox Code Playgroud)

然后我使用上面定义的函数在ui.R中创建所需的textarea控件元素

shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Test Header Panel"),

  sidebarPanel(),

  mainPanel(
        inputTextarea('exampleTextarea', '',20,35 )
  )
))
Run Code Online (Sandbox Code Playgroud)


Jef*_*len 15

这里可能或可能不相关,但是我使用shinyAce包来包装并公开Shiny中的Ace文本编辑器.Ace主要用于代码编辑(包括各种语言的语法高亮),但提供了类似文本区域的界面,用于编写组成多行文本/代码.

您可以查看示例,看看是否可能是您正在寻找的内容.(尝试使用不同的"模式"进行语法高亮显示和使用颜色组合的主题.)


alk*_*989 5

从版本0.14开始, Shiny具有的实现textAreaInput