繁体   English   中英

如何使用JQuery触发在Shiny中触发observeEvent的按钮单击?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM