以下代码每次在键盘上按下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)是否是最合适的解决方案。
答案 0 :(得分:1)
我附上了单选按钮的HTML布局的屏幕截图。链接解决方案的问题是它按ID引用按钮,但您没有为单选按钮设置ID。以下是可能的解决方案。
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})
})
}