击键时用闪亮的javascript更新radioButtons

时间:2017-01-24 16:31:37

标签: javascript r radio-button shiny

以下代码每次在键盘上按下button时都应将opt2更新为q

library(shiny)

fun <- "$(function(){ 
      $(document).keyup(function(e) {
      if (e.which == 81) {
        $('#button_2').prop('checked',true)
      }
      });
      })"

runApp(shinyApp(
  ui = fluidPage(
    tags$script(HTML(fun)),
    radioButtons("button", "A radio button", choices = list("opt1" = 1, "opt2" = 2)),
    textOutput("text")),
  server=function(input, output, session) {
    output$text <- renderText({input$button})
  }
))

问题在于我不知道Shiny如何在内部存储单选按钮。我正在尝试将button的第二个选项引用为button_2,但它显然无效。另外,我不确定 JQuery 解决方案(建议here)是否是最合适的解决方案。

1 个答案:

答案 0 :(得分:1)

我附上了单选按钮的HTML布局的屏幕截图。链接解决方案的问题是它按ID引用按钮,但您没有为单选按钮设置ID。以下是可能的解决方案。 enter image description here

fun <- "$(function() {
  $(document).keyup(function(e) {
    if (e.which == 81) {
      var $radioButtons = $('input:radio[name=button]');
      $radioButtons.filter('[value=2]').prop('checked', true);
    }
})
});"

注意:如果您还希望更新显示的文本值,则需要在JavaScript中添加Shiny.onInputChange()调用。这将传回标记为“按钮”的值,其值为2.

fun <- "$(function() {
  $(document).keyup(function(e) {
    if (e.which == 81) {
      var $radioButtons = $('input:radio[name=button]');
      $radioButtons.filter('[value=2]').prop('checked', true);
      Shiny.onInputChange('button', 2);
    }
})
});"

然后更新服务器功能以创建一个观察器来更改单选按钮:

  server=function(input, output, session) {
    output$text <- renderText({input$button})
    observe({
      output$text <- renderText({input$button})
    })
  }