![](/img/trans.png)
[英]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.