Form API `#ajax` effectively disables behaviors on elements. I can't see this documented, but that's how it works, consistently. So the solution was to change the line:

    $('#edit-categories-update', context).on('click', function(){

and make it

    $('#edit-categories-update').ajaxSuccess(function() {

That way code was not executed on click, but after processing of AJAX triggered by the button succeeded. It's not useful if you want to perform JavaScript *before* AJAX call, but if you need it to happen *after*, or if you *don't care*, it is a sufficient solution. If you need things to happen before AJAX call, use this instead:

    $('#edit-categories-update').ajaxStart(function() {