无论如何,我都不是 html 或 JavaScript 方面的专家。因此,我希望您能就这个问题得到帮助。
我认为我应该提供应用程序的较小版本,以便能够解释问题。这是一个简单应用程序的 app.R,它允许用户在文本区域中写入一个单词。单词的第一个字母将自动显示为操作按钮的标签,如果用户单击操作按钮,则 textArea 的内容将更新,说明用户编写的单词是以元音还是辅音开头。
library(shiny)
library(shinydashboard)
# Define UI for application
ui <- dashboardPage(
dashboardHeader(
title = "page_title"
),
dashboardSidebar(
),
dashboardBody(
tabBox(title = "app_title",
id = "id", width = "800px",
tabPanel("tab1)",
fluidRow(
column(width = 12,
box(
status = "info", solidHeader = TRUE,
collapsible = FALSE,
width = 12,
title = "textInput",
tags$textarea(id = "text_input1", rows = 2, cols = 50, "", autofocus = "autofocus"),
fluidRow(
column(width = 12,
actionButton("actionbutton1", label = textOutput("actionbutton1_label"))
)))))),
tabPanel("tab2"
))))
# Define server logic
server <- function(input, output, session) {
data1 <- eventReactive(input$actionbutton1, {substr(input$text_input1, 1, 1)})
output$actionbutton1_label <- renderPrint(cat(noquote({substr(input$text_input1, 1, 1)})))
observe({
if (input$actionbutton1 == 0) return()
isolate({
if (data1() %in% c("a", "e", "i", "o", "u")) {
updateTextInput(session, "text_input1",
value = paste(input$text_input1, "starts with a vowel", "", sep = " "))
}
else {
updateTextInput(session, "text_input1",
value = paste(input$text_input1, "starts with a consonant", "", sep = " "))
}
})
})}
# Run the application
shinyApp(ui = ui, server = server)
问题定义:
当你第一次运行上面的应用程序时,你会在textArea中看到光标,因为textArea标签定义中的参数autofocus =“autofocus”,所以焦点加载没有问题。当您单击操作按钮时,光标不再位于文本区域中。对于这个简单的应用程序来说,这似乎是不必要的,但对于实际的应用程序来说,这很重要,我希望在用户单击操作按钮后将光标返回到文本区域中。
问题再次是,每当应用程序的用户单击操作按钮时,光标就会从文本区域消失,并且应用程序的用户必须单击文本区域才能恢复光标并继续他/她的输入。我希望通过保持光标始终处于活动状态并集中在文本区域来为用户节省额外的点击,无论用户使用应用程序界面的其他元素多少次。
Research:网上有很多关于如何控制光标位置的帖子。在这些帖子中,我认为,如果我错了请纠正我,这种方法几乎是与我希望实现的目标最相关的方法:
http://www.mediacollege.com/internet/javascript/form/focus.html http://www.mediacollege.com/internet/javascript/form/focus.html
我具体需要帮助什么:
如果你点击上面的链接,你会发现一段非常有趣的 html 代码,我复制在这里:
<form name="myform2">
<input type="text" name="mytextfield2">
<input type="button" name="mybutton" value="Set Focus" OnClick="document.myform2.mytextfield2.focus();">
</form>
我希望您能够帮助我,如何以及在哪里可以将此代码嵌入到我闪亮的 ui.R 中?当然,我必须为文本区域和按钮分配一个表单,并且我将相应地更改文本区域和按钮的名称。我只需要使上面的 html 代码 ui.R 友好(可读且可执行)。非常感谢对此的任何帮助。
到目前为止我尝试过但没有成功:
tags$head(HTML("<form name="myform2">
<input type="text" name="text_input1">
<input type="button" name="addword1" value="Set Focus" OnClick="document.myform2.text_input1.focus();">
</form>"))
正如您所看到的,当我将上述代码嵌入到 ui.R 文件中时,语法很混乱,并且出现了各种语法警告。
可能重要:我正在使用闪亮的仪表板,文本区域和操作按钮都在仪表板主体的选项卡框中的选项卡面板中定义。
多谢