radioButton()选择HTML和shinyjs :: reset()

时间:2016-09-20 11:49:47

标签: r shiny shinyjs

我的目标是在其标签的重置功能中获得带有HTML的radioButton()输入。

我从以下开始,因为radioButtons()不允许标签使用HTML。

 library(shiny)
 library(shinyjs)

 ui <- shinyUI(bootstrapPage(

   useShinyjs(),
   tags$div(id = "form",
   tags$div(HTML('
                 <div id="rating" class="form-group shiny-input-radiogroup shiny-input-container">
                 <label class="control-label" for="rating">Your Rating:</label>
                 <div class="shiny-options-group">
                 <div class="radio">
                 <label>
                 <input type="radio" name="one" value="1"/>
                 <span><i class="fa fa-star" aria-hidden="true"></i></span>
                 </label>
                 </div>
                 <div class="radio">
                 <label>
                 <input type="radio" name="two" value="2"/>
                 <span><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i></span>
                 </label>
                 </div>
                 </div>
                 </div>'))),

   actionButton("feedback_btn", "send feedback", icon = icon("send", lib = "font-awesome")),
   htmlOutput("Ratingout")
 ))

   server <- shinyServer(function(input, output, session) {
     output$Ratingout <- renderText({
       paste("The Rating was ", input$rating)
     })

     observeEvent(input$feedback_btn, {
       reset("rating")

     })
   })

   shinyApp(ui, server)

但我遇到了两个问题:

  • 我无法访问input$Ratingout值和
  • 似乎我没有以正确的方式使用shinyjs::reset();因为我想以某种方式重置按钮,按下按钮后有选择。

1 个答案:

答案 0 :(得分:2)

您需要bind输入才能在服务器端使用它。

在我的脑海中轻松覆盖闪亮的radioButtons

但在帮助中你可以看到:

  

如果您需要表示“未选择”状态,则可以   默认单选按钮没有使用选择的选项   selected =字符(0)。但是,不推荐这样做,因为它给出了   一旦他们做出选择,用户就无法返回该状态。   相反,考虑让你的第一个选择是c(“无”   选择“=”“)。

所以请使用0作为默认值(reset不能与character(0)一起使用)

实施例

library(shiny)
library(shinyjs)

edit_button=function(rb){

  for( i in 1:length(rb$children[[2]]$children[[1]])){
    value=as.numeric(rb$children[[2]]$children[[1]][[i]]$children[[1]]$children[[1]]$attribs$value)
    if(!is.na(value)&value>0){
    rb$children[[2]]$children[[1]][[i]]$children[[1]]$children[[2]]$children[[1]]=HTML(paste(rep('<i class="fa fa-star" aria-hidden="true"></i>',value),sep = "",collapse = ""))
    }
    }
  rb

}




ui <- shinyUI(bootstrapPage(
  edit_button( radioButtons("rate_","Rate",choices = list("None selected"=0,'one'=1,"two"=2))),
  useShinyjs(),
  actionButton("feedback_btn", "send feedback", icon = icon("send", lib = "font-awesome")),
  htmlOutput("Ratingout")
           ))

server <- shinyServer(function(input, output, session) {
  output$Ratingout <- renderText({
    paste("The Rating was ", input$rate_)
  })

  observeEvent(input$feedback_btn, {
    reset("rate_")
  })
})

shinyApp(ui, server)