[英]SlickR Shiny R dynamically convert dots to images when filtering the carousel obj by user input
[英]R Shiny keycode of user input
我必须在textInput中获取keycode。 为此,我开发了以下代码:
library(shiny)
ui <- fluidPage(
tags$script(sprintf('$(document).on("shiny:sessioninitialized", function(event) { // wait for shiny to be loaded
document.getElementById("%s").onkeydown = function(event) {
Shiny.onInputChange("%s", [event.keyCode,event.timeStamp]);
};
});',"textInput","jsrow")),
HTML(sprintf("<div 'form-group shiny-input-container'>
<label for='%s'>%s</label>
<input class='form-control' charset='UTF-8' type='text' placeholder='%s' onkeydown = 'return (event.keyCode >=48 && event.keyCode <= 57)
|| event.keyCode == 8||(event.keyCode >=37 && event.keyCode <= 40)||(event.keyCode >=33 && event.keyCode <= 34)||event.keyCode == 46
||event.keyCode == 45||event.keyCode == 9||event.keyCode == 13||event.keyCode == 32||(event.keyCode >=16 && event.keyCode <= 18)||event.keyCode == 189
||event.keyCode == 173||(event.keyCode >=112 && event.keyCode <= 123)||event.keyCode == 144||(event.keyCode >=96 && event.keyCode <= 105)' id='%s' required>
</div>", "textInput", "", "41741-155", "textInput")
)
)
server <- function(input, output, session) {
observeEvent(input$jsrow, {
print(paste0("Value of input is ", input$jsrow[1]))
})
}
shinyApp(ui, server)
但是当我模块化textInput时,代码不再有效。 任何想法?
也许是这样的:
library(shiny)
textInput2 <- function(inputId, label, value = "", width = NULL,
placeholder = NULL, onkeydown = NULL){
input <- textInput(inputId, label, value, width, placeholder)
input$children[[2]] <-
htmltools::tagAppendAttributes(input$children[[2]], onkeydown = "%s")
tag <- as.character(input)
HTML(sprintf(tag, onkeydown))
}
js <- "Shiny.setInputValue('jsrow', [event.keyCode,event.timeStamp]);
return !((event.which >=48 && event.which <= 57)
|| event.which == 8||(event.which >=37 && event.which <= 40)||(event.which >=33 && event.which <= 34)||event.which == 46
||event.which == 45||event.which == 9||event.which == 13||event.which == 32||(event.which >=16 && event.which <= 18)||event.which == 189
||event.which == 173||(event.which >=112 && event.which <= 123)||event.which == 144||(event.which >=96 && event.which <= 105))
;
"
ui <- fluidPage(
textInput2("textinput", "Enter text:", onkeydown = js)
)
server <- function(input, output){
observeEvent(input$jsrow, {
print(paste0("Value of input is ", input$jsrow[1]))
})
}
shinyApp(ui, server)
在模块中,像往常一样使用ns
。
js <- function(id) {sprintf("Shiny.setInputValue('%s_jsrow', [event.keyCode,event.timeStamp]);
return !((event.which >=48 && event.which <= 57)
|| event.which == 8||(event.which >=37 && event.which <= 40)||(event.which >=33 && event.which <= 34)||event.which == 46
||event.which == 45||event.which == 9||event.which == 13||event.which == 32||(event.which >=16 && event.which <= 18)||event.which == 189
||event.which == 173||(event.which >=112 && event.which <= 123)||event.which == 144||(event.which >=96 && event.which <= 105));", id)}
ui <- fluidPage(
textInput2("textinput", "Enter text:", onkeydown = js("textinput"))
)
server <- function(input, output){
observeEvent(input$textinput_jsrow, {
print(paste0("Value of input is ", input$textinput_jsrow[1]))
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.