Skip to content

Instantly share code, notes, and snippets.

@xiaodaigh
Last active August 18, 2022 17:45
Show Gist options
  • Select an option

  • Save xiaodaigh/6810928 to your computer and use it in GitHub Desktop.

Select an option

Save xiaodaigh/6810928 to your computer and use it in GitHub Desktop.
Shiny: Disable Button
library(shiny)
disableActionButton <- function(id,session) {
session$sendCustomMessage(type="jsCode",
list(code= paste("$('#",id,"').prop('disabled',true)"
,sep="")))
}
shinyServer(function(input, output,session) {
observe({
if(input$btn1 == 0) return()
disableActionButton("btn2",session)
})
})
library(shiny)
shinyUI(basicPage(
tags$head(tags$script(HTML('
Shiny.addCustomMessageHandler("jsCode",
function(message) {
console.log(message)
eval(message.code);
}
);
')))
,actionButton("btn1","Disable the other button")
,actionButton("btn2","Button")
)
)
@elahika
Copy link
Copy Markdown

elahika commented Aug 8, 2014

Hi

Thanks for your code. Is is possible to do the same thing for downloadButton? I'm not very familiar with javascript, but I see that downloadButton does not have an id.
Also, is it possible to add a pop-op message for explaining why this button is disabled?

@jiesong111
Copy link
Copy Markdown

Does anyone know how to do it? I have some questions, I want to disable certain select inputs, this example only works for actionbutton, can any one tell me how to disable select inputs?
Thanks very much.

@daattali
Copy link
Copy Markdown

Hi, you can disable select inputs (and almost any other input) using my new package shinyjs with a simple function call shinyjs::disable(id)
https://github.com/daattali/shinyjs

Example:

library(shiny)
library(shinyjs)
runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    selectInput("test", "Select once", letters),
    actionButton("submit", "Choose")
  ),
  server = function(input, output, session) {
    observeEvent(input$submit, {
      disable("test")
    })
  }
))

The reason disabling selectize inputs and some other inputs don't just work is because they use a special javascript library to construct the tag instead of plain HTML. shinyjs is meant to help shiny app developers do these kinds of small tasks with normal R code instead of fiddling with javsacript

@cutariechu
Copy link
Copy Markdown

Thank you Dean, that was very helpful

@tanthiamhuat
Copy link
Copy Markdown

can we do a similar one to enable a disabled button like below:
enableActionButton <- function(id,session) { session$sendCustomMessage(type="jsCode", list(code= paste("$('#",id,"').prop('enabled',true)" ,sep=""))) }

@vitallish
Copy link
Copy Markdown

Hi, unfortunately the last comment didn't work for me. It should be as below - the property to change is still the 'disabled' property

enableActionButton <- function(id,session) {
  session$sendCustomMessage(type="jsCode",
                             list(code= paste("$('#",id,"').prop('disabled',false)"
                                    ,sep="")))
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment