让我们说我的应用中有两个actionButtons是左右箭头。他们习惯于浏览多个数据表和情节,并给出了一个"左"和#34;对"。我喜欢的是能够使用键盘上的箭头键进行导航。我以为我能够使用JQuery简单地触发这些按钮上的点击事件,但这似乎并没有传达给Shiny。
那么,我有不同的方式来做这件事吗?这是我目前正在使用的JQuery:
$(document.ready(function() {
$("body").keydown(function(e) {
if (e.which === 37) {
$("#plot-left").trigger("click");
} else if (e.which === 39) {
$("#plot-right").trigger("click");
}
});
});
在Shiny的一面,我有这个代码:
increase_counter <- function() {
values$counter <- values$counter + 1
if (values$counter > values$cluster_count) values$counter <- 1
}
decrease_counter <- function() {
values$counter <- values$counter - 1
if (values$counter == 0) values$counter <- values$cluster_count
}
observeEvent(input$plot_left, {
decrease_counter()
})
observeEvent(input$plot_right, {
increase_counter()
})
JQuery函数正在运行,通过在jquery中使用console.log()
证明了这一点。问题是按下的触发按钮没有传回Shiny服务器,导致它运行命令。
这不是一个至关重要的功能,但它很难实现。谢谢!
答案 0 :(得分:5)
你说你添加了一个console.log()语句,但我不知道它会如何起作用。您是否真的尝试通过在浏览器中打开JavaScript控制台来调试代码并尝试单步执行该功能?当我运行你的JS代码时,我发现它有一个小的语法错误。在document
之后缺少结束括号。当我修复它,它工作正常。这是一个示例应用程序(请在下次包含一个完整的可重现示例,而不仅仅是服务器代码)
library(shiny)
jscode <-
'
$(document).ready(function() {
$("body").keydown(function(e) {
if (e.which === 37) {
$("#left").trigger("click");
} else if (e.which === 39) {
$("#right").trigger("click");
}
});
});
'
ui <- fluidPage(
tags$script(jscode),
actionButton("left", "Left"),
actionButton("right", "Right")
)
server <- function(input, output, session) {
observeEvent(input$left, {
cat("left\n")
})
observeEvent(input$right, {
cat("right\n")
})
}
shinyApp(ui = ui, server = server)
答案 1 :(得分:0)
试试这个
$("body").keydown(function(e) {
if(e.keyCode == 37) { // left
// click left
});
}
else if(e.keyCode == 39) { // right
// click right
}
});