我的目标是在其标签和的重置功能中获得带有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()
;因为我想以某种方式重置按钮,按下按钮后有否选择。答案 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)