2017-01-24 1 views
0

Der folgende Code button-opt2q jedes Mal aktualisieren soll, wird in der Tastatur gedrückt:Update-Radiobuttons mit Javascript in Shiny auf Tastendruck

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}) 
    } 
)) 

Das Problem ist, dass ich weiß nicht, wie Shiny speichert den Radioknopf im Inneren. Ich versuche, die zweite Option von button als button_2 zu referenzieren, aber es funktioniert eindeutig nicht. Ich bin mir auch nicht sicher, ob die JQuery Lösung (vorgeschlagen here) die am besten geeignete ist.

Antwort

1

Ich habe einen Screenshot des HTML-Layouts Ihrer Optionsfelder angehängt. Das Problem mit der verknüpften Lösung bestand darin, dass die Schaltflächen nach ID referenziert wurden, aber Sie keine IDs für Ihre Optionsfelder festgelegt haben. Unten ist eine mögliche Lösung. 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); 
    } 
}) 
});" 

Hinweis: Wenn Sie die angezeigte Textwert aktualisieren möchten, müssen Sie Shiny.onInputChange() Anruf in Ihrem JavaScript hinzuzufügen. Dies wird ein Wert der Bezeichnung ‚Button‘ passieren zurück, die einen Wert von 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); 
    } 
}) 
});" 

hat und dann Server-Funktion aktualisieren, einen Beobachter für Änderungen an den Radio-Buttons zu erstellen:

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