【问题标题】:How can I return value of roundSlider in Shiny?如何在 Shiny 中返回 roundSlider 的值?
【发布时间】:2021-06-07 22:59:51
【问题描述】:

我想在我的 Shiny 应用程序中使用 roundSlider 而不是滑块输入小部件。我的简单示例应用程序如下。但我不知道如何返回滑块中的选定值。在我的示例中,renderPrint 仅返回 NULL。感谢您的任何建议。

library(shiny)
library(shinyWidgets)

ui = shinyUI(fluidPage(
  
  tags$head(
   
    tags$script(src="https://cdn.jsdelivr.net/jquery/1.11.3/jquery.min.js"),
    tags$link(href="https://cdn.jsdelivr.net/jquery.roundslider/1.3/roundslider.min.css", rel="stylesheet" ), 
    tags$script( src="https://cdn.jsdelivr.net/jquery.roundslider/1.3/roundslider.min.js"), 
    
    
  ),
  
   
  
tags$div( id="slider1", class="rslider"),
  tags$script('$("#slider1").roundSlider({
    min:0,
    max:110,
    radius: 80,
    circleShape: "half-top",
    sliderType: "range",
    showTooltip: true,
    value: "0,110"
  });'),
 
  tags$div( id="slider2", class="rslider"),
  tags$script('$("#slider2").roundSlider({
    min:0,
    max:110,
    radius: 80,
    circleShape: "half-top",
    sliderType: "min-range",
    value: 0
  });'),
  
verbatimTextOutput("slidInp1"),
verbatimTextOutput("slidInp2"), 

))

server = function(input, output){
   
  output$slidInp1 <- renderPrint({
 
   print(input$slider1)
  
  })
 
  
  output$slidInp2 <- renderPrint({
    
    print(input$slider2)
    
  })
}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: jquery r shiny


    【解决方案1】:

    您可以使用shinyjs 包在服务器端运行javascript,并使用Shiny.onInputChange() 访问该值。试试这个

    library(shiny)
    library(shinyWidgets)
    library(shinyjs)
    
    ui = shinyUI(fluidPage(
      useShinyjs(),
      tags$head(
        
        tags$script(src="https://cdn.jsdelivr.net/jquery/1.11.3/jquery.min.js"),
        tags$link(href="https://cdn.jsdelivr.net/jquery.roundslider/1.3/roundslider.min.css", rel="stylesheet" ), 
        tags$script( src="https://cdn.jsdelivr.net/jquery.roundslider/1.3/roundslider.min.js"), 
        
      ),
      
      tags$div( id="slider1", class="rslider"),
      tags$script('$("#slider1").roundSlider({
        min:0,
        max:110,
        radius: 80,
        circleShape: "half-top",
        sliderType: "range",
        showTooltip: true,
        value: "0,80"
      });'),
      
      tags$div( id="slider2", class="rslider"),
      tags$script('$("#slider2").roundSlider({
        min:0,
        max:110,
        radius: 80,
        circleShape: "half-top",
        sliderType: "min-range",
        value: 40
      });'),
      br(),br(),
      actionButton("btn", "Update"),br(), br(), 
      verbatimTextOutput("slidInp1"),
      verbatimTextOutput("slidInp2"), 
      
    ))
    
    server = function(input, output){
      
      observeEvent(input$btn, {
        runjs('var slidr1 = $("#slider1").roundSlider("getValue"); Shiny.onInputChange("slidr1",slidr1);')
        runjs('var slidr2 = $("#slider2").roundSlider("getValue"); Shiny.onInputChange("slidr2",slidr2);')
      }, ignoreNULL = FALSE)
      
      output$slidInp1 <- renderPrint({
        
        print(input$slidr1)
        
      })
      
      output$slidInp2 <- renderPrint({
        
        print(input$slidr2)
        
      })
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多