Edit in JSFiddle

var disableitem = function (element) {
    var $element = $(element),
        regEvents = $._data(element[0], 'events'),
        isDisabled = $element.data('tmp-disabled') || false;

    if(isDisabled === false){
        if(regEvents){
            // reset tmp event store
            var clickHandlers = [];
            jQuery.each(regEvents, function(key, value) {            
                var handlers = [];
                for(var i=0; i<value.length; i++){
                    handlers.push(value[i]);
                }
                
                clickHandlers.push({
                    key: key,
                    value: handlers
                });
            });
            
            // store handlers on element for later reuse
            $element.data('tmp-events', clickHandlers);
        }
            
        // remove all events
        $element.unbind();
            
        // apply some style to make the checkbox look like disabled
        $element.attr('style', 'opacity:.4;');
        $element.data('tmp-disabled', true);
        
        // register our event handler
        $element.bind('click keydown', function (ev) {
            ev.preventDefault();
            return false;
        });
    }
}

var enableitem = function (element) {
    var $element = $(element),
        clickHandlers = $element.data('tmp-events'),
        isDisabled = $element.data('tmp-disabled');
    
    if(isDisabled){
        // remove our click  handler s.t. our field is checkable again
        $element.unbind();
    }
    
    if(clickHandlers && clickHandlers.length > 0){        
        // rebind all events from before
        for(var i=0; i < clickHandlers.length; i++){
            var entry = clickHandlers[i];
            
            if(entry.key && entry.value && entry.value.length > 0){
                jQuery.each(entry.value, function(idx, handlerEntry){
                    $element.bind(handlerEntry.type, handlerEntry.handler);
                });                
            }
        }
    }
    
    // reset the style
    $element.attr('style', 'opacity:1;');
    $element.data('tmp-disabled', false);
}


$(function(){
   
    $('.js-enable').click(function(){
        enableitem($('#chk')); 
    });
    
    $('.js-disable').click(function(){
        disableitem($('#chk')); 
    });    
   
    $('#chk').click(function(){
        alert('hi'); 
    });
    
    $('#chk').click(function(){
        console.log('ciao'); 
    });
    
    disableitem($('#chk'));
});
<p>
    When you execute a plain normal POST to the server, disabled fields won't be sent to the server. This can often be an issue, when you have an old (ugly) WebForms application where you add some JavaScript dynamic behavior.
</p>
<p>
    So...a workaround :)<br/>
    Don't add the "disabled" property, but rather mimic it with JavaScript.
</p>

<input id="chk" type="checkbox">
<a href="javascript:;" class="js-enable">Enable</a>
<a href="javascript:;" class="js-disable">Disable</a>