【问题标题】:pickerinput as filter disable all not disabling button using shinyJS选择器输入作为过滤器使用shinyJS禁用所有未禁用按钮
【发布时间】:2021-08-28 13:38:28
【问题描述】:

希望你保持安全。

我已经搜索过类似的问题,但没有成功。

我的代码有 5k 行,所以发布它是不行的。

我会尽量提供尽可能多的信息。

简而言之,我有一些 pickerInputs 用作 rhandsontable 对象的反应式过滤器。

我有一个保存按钮,以便用户保存他们的输入。

我最初的策略有一个致命弱点,即使用过滤进行保存会覆盖 rhandsontable 中的所有数据。

因此,一个快速的解决方法是添加一个observeEvent,其中保存按钮(通过使用ShinyJS)仅在pickerInput 选择了所有选项时才启用。

到目前为止,一切都很好,但我注意到一个奇怪的行为:最初,如果我们在 pickerInput 中单击“取消全选”,则保存按钮被禁用,但通过单击“全选”(启用保存按钮)然后单击“取消全选”那么保存按钮不会被禁用。

下面是我的 observeEvent 代码。

以前有没有人出现过这种行为?

## having buttons disabled by default to account for null/empty statement
  shinyjs::disable("save_data_PCD_Metrics") 
  
  observeEvent(input$metricsTableEXCELPCDProject, {
    req(input$metricsTableEXCELPCDProject)
    print(length(input$metricsTableEXCELPCDProject))
    print(length(sort(unique(as.character(metricsTableEXCEL$Project)))))
    print(isTRUE(length(input$metricsTableEXCELPCDProject) == length(sort(unique(as.character(metricsTableEXCEL$Project))))))
    print(input$metricsTableEXCELPCDProject)
    
    ## having buttons disabled by default to account for null/empty statement
    shinyjs::disable("save_data_PCD_Metrics")
    
    ## toggle state of the button when condition of all projects selected 
    if(isTRUE(length(input$metricsTableEXCELPCDProject) == length(sort(unique(as.character(metricsTableEXCEL$Project)))))) {
      shinyjs::enable("save_data_PCD_Metrics")
    }
    
  })
  

最好的,

R

【问题讨论】:

    标签: r button shiny shinyjs pickerinput


    【解决方案1】:

    要解决您的问题,您可以在单独的观察者中启用保存按钮,而不是在 observeEvent 中。试试这个

    library(shiny)
    library(shinyjs)
    library(shinyWidgets)
    
    df1 <- data.frame(A=c(1:15),Y=c(16:30))
    
    ui <- fluidPage(
      useShinyjs(),
      pickerInput("test",choices=list("A"=list(1,2,3,4,5),"B"=list(6,7,8,9,10), "C" = list(11,12,13,14,15)),
                  options = list(`actions-box` = TRUE 
                                 
                                 ),
                  multiple=TRUE),
      actionButton("savee", "Save"),
      textOutput("testOutput") 
    )
    
    server <- function(input, output) {
      
      shinyjs::disable("savee") 
      
      observeEvent(input$test, {
        req(input$test)
        print(length(input$test))
        #print(length(sort(unique(as.character(metricsTableEXCEL$Project)))))
        print(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A))))))
        print(input$test)
        
        ## having buttons disabled by default to account for null/empty statement
        # shinyjs::disable("savee")
        
        ##  toggle state of the button when condition of all projects selected  
        ##  enabling within this observeEvent will not work
        # if(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A)))))) {
        #   shinyjs::enable("savee")
        # }
        
      })
      
      saveme <- reactive({
        if(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A)))))) saveme = 1 else saveme = 0
      })
       
      observe({
        if (saveme()) {shinyjs::enable("savee")  ## this works
        }else shinyjs::disable("savee")
        print(saveme())
      })
      
      output$testOutput <- renderText({paste(input$test)})
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 这就像一个魅力......谢谢!显然需要单独的反应和观察,但吸取教训。
    猜你喜欢
    • 2013-03-29
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多