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的价值.
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)
| 归档时间: |
|
| 查看次数: |
17383 次 |
| 最近记录: |