1

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

我从以下开始,因为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()以正确的方式使用;因为我想以某种方式重置按钮,所以按下按钮后没有选择。
4

1 回答 1

2

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

在我的脑海里很容易覆盖闪亮radioButtons

但在帮助中你可以看到:

如果您需要表示“未选择”状态,可以使用 selected = character(0) 将单选按钮默认为不选择任何选项。但是,不建议这样做,因为一旦用户做出选择,它就无法返回到该状态。相反,请考虑让您的第一个选择是 c("None selected" = "")。

所以最好使用 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)
于 2016-09-20T13:06:39.293 回答