[英]How to use JQuery to trigger a button click that procs observeEvent in Shiny?
假设我的应用程序中有两个actionButtons,分别是左右箭头。 它们用于在多个数据表和图表中导航,并提供ID“左”和“右”。 我想要的是也能够使用键盘上的箭头键进行导航。 我以为我可以使用JQuery来简单地触发这些按钮上的click事件,但这似乎并没有传达给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服务器,从而导致它运行其命令。
这不是关键功能,但是很容易完成。 谢谢!
您说您添加了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)
尝试这个
$("body").keydown(function(e) {
if(e.keyCode == 37) { // left
// click left
});
}
else if(e.keyCode == 39) { // right
// click right
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.