有没有办法在shiny中找出焦点是否在文本字段(或者选择字段)上?
我的网站有很多元素,如图,表,数字输入和按钮。
目前我有这样的东西:
library(shiny)
ui <- fluidPage(
tags$script('$(document).ready(function(){ $("*").focus( function(e){ Shiny.setInputValue("focusedElement", e.target.id);}); }); '),
textOutput("output1"),
textInput(inputId = "text1", label = 'Text1', value = ""),
numericInput(inputId = 'num1',label = 'Num1', value=5),
selectInput(inputId = 'select1', label='Select1',choices = c(1,2,3)),
plotOutput('plot'),
actionButton('btn','Btn'),
DT::dataTableOutput('table'),
)
server <- function(input, output, session) {
output$output1 <- renderText({
print(input$focusedElement)
input$focusedElement })
output$table<- DT::renderDataTable(iris)
output$plot<-renderPlot(plot(iris[,c(3,4)]))
}
shinyApp(ui, server)
虽然我关注了每一个输入和空白的背景,但唯一有效的是文本输入,数字输入和按钮。这是为什么?(看看控制台的输出,select1
在某个点上肯定是关注的,但从来没有打印出来,还有搜索栏,情节和背景。)
请随意提出完全不同的方法或纠正我的风格。
最后我想知道的实际上只是我现在是在一个文本字段(如text1
或num1
或表的搜索栏)还是一个按钮中。
1条答案
按热度按时间cuxqih211#
这可能是因为被聚焦的元素是
option
元素,而不是select
元素本身。在onFocus选项的帮助下,您可以使用
selectizeInput
触发焦点上的内容。编辑
还有
onBlur
选项,一个在焦点丢失时执行的函数,所以你可以这样做:对您感兴趣的其他小部件执行类似的操作,这样,Shiny变量
input$focus
将始终设置为您感兴趣的小部件中当前聚焦的元素,如果没有聚焦的元素,则设置为NULL
。