All jQuery UI widgets in disabled state

by TJ VanToll

HTML

<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<!-- Specifically using 1.9.0 so the fix for #6059 isn't present. -->
<link href="http://code.jquery.com/ui/1.9.0/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="http://code.jquery.com/ui/1.9.1/jquery-ui.js"></script>

<p>The following is a complete list of jQuery widgets in their disabled state.</p>

<button id="button">Button</button>
<div class="space"></div>
<div id="accordion">
    <h3>One</h3>
    <div>jfdioasjfisdoaj fisadjfpoiasjd ifojds aiofjdasoif jasdofj diaop</div>
    <h3>Two</h3>
    <div>fjdasoifjdsaoipfj adsiofjdosapifj iosdaj fipoadsjfiosadjifods ajfopjds</div>
</div>
<div class="space"></div>
<input id="datepicker" type="text" />
<div class="space"></div>
<div id="datepicker2"></div>
<div class="space"></div>
<div id="dialog"></div>
<div class="space"></div>
<ul id="menu">
    <li><a>One</a></li>
    <li>
        <a>Two</a>
        <ul>
            <li><a>Two.1</a></li>
            <li><a>Two.2</a></li>
        </ul>
    </li>
</ul>
<div class="space"></div>
<div id="progressbar"></div>
<div class="space"></div>

<p>Not Disabled:</p>
<div id="slider"></div>

<p>Disabled:</p>
<div id="slider-disabled"></div>


<div class="space"></div>
<input id="spinner" type="text" />
<div class="space"></div>
<div id="tabs">
    <ul>
        <li><a href="#one">One</a></li>
        <li><a href="#two">Two</a></li>
    </ul>
    <div id="one">One</div>
    <div id="two">Two</div>
</div>
<div class="space"></div>
<button id="showDialog">Show Dialog</button>

CSS

body { padding: 20px; }
p { line-height: 1.5; margin-bottom: 20px; }
.space { clear: both; margin: 50px; }

/* IE8 opacity madness, see #6059 & #6727 */

/* This has no effect */
/*
.ui-state-disabled {
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=35)";
}
*/

/* Original idea. Unfortunately this might have adverse effects on the speced filter property and filter: inherit doesn't always work (see below). */
/*.ui-state-disabled * { filter: inherit; } */

/* Trying to apply the hack to IE7 & IE8 only doesn't work.  The \9 hack doesn't work on filter...? */
/*
.ui-state-disabled * { filter: inherit\9 !important; color: red\9 !important; }
*/

/* The filter: inherit approach.  This works for the slider and the button but not the icons in the calendar.  Apparently filter: inherit doesn't work for non-immediate children...? */
/*
.ui-state-disabled .ui-icon,
.ui-slider.ui-state-disabled .ui-slider-handle,
.ui-slider.ui-state-disabled .ui-slider-range {
    filter: inherit;
}
*/

/* This is the only thing I can get to work.  *sigh* */
.ui-state-disabled .ui-icon { filter: Alpha(Opacity=35); } /* This is already in 1.9.1 */

.ui-slider.ui-state-disabled .ui-slider-handle,
.ui-slider.ui-state-disabled .ui-slider-range {
    filter: inherit; /* New fix for #6727 */
}

JavaScript

$('#button').button({
    icons: {
        primary: 'ui-icon-gear'            
    },
    disabled: true            
});
$('#accordion').accordion({ disabled: true });
$('#datepicker').datepicker({ disabled: true });
$('#datepicker2').datepicker({ disabled: true });
$('#dialog').dialog({ disabled: true, autoOpen: false, modal: true });
$('#menu').menu({ disabled: true });
$('#progressbar').progressbar({ disabled: true, value: 37 });
$('#slider, #slider-disabled').slider({
    range: true,
    min: 1,
    max: 20,
    values: [5, 15]        
});

$('#slider-disabled').slider('disable');
$('#spinner').spinner({ disabled: true });
$('#tabs').tabs({ disabled: true });
$('#showDialog').on('click', function() {
    $('#dialog').dialog('open');
});