【问题标题】:How to use JQuery to trigger a button click that procs observeEvent in Shiny?如何使用 JQuery 触发在 Shiny 中触发 observeEvent 的按钮单击?
【发布时间】:2016-04-19 05:35:06
【问题描述】:

假设我的应用中有两个 actionButton,分别是左右箭头。它们用于在多个数据表和绘图中导航,并给出“左”和“右”的 id。我想要的是能够使用键盘上的箭头键进行导航。我以为我可以使用 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 服务器,导致它运行它的命令。

这不是一个重要的功能,但它会很高兴完成。谢谢!

【问题讨论】:

    标签: jquery r shiny


    【解决方案1】:

    您说您添加了一个 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)
    

    【讨论】:

    • console.log 函数只是为了检查 JQuery 代码是否正常工作,这样我就可以继续弄清楚为什么它没有被传达给 Shiny。但是,话虽如此,谢谢您的回答!该问题已解决,因为它只是一个错字。
    【解决方案2】:

    试试这个

    $("body").keydown(function(e) {
      if(e.keyCode == 37) { // left
        // click left
        });
      }
      else if(e.keyCode == 39) { // right
        // click right
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 2019-08-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 2019-05-31
      • 1970-01-01
      相关资源
      最近更新 更多