How to NOT turn element read only when waiting for '#ajax' callback in Drupal 7 forms? I need a simple '#type' =&gt; 'textfield' field. When a user types in it, I want to update another section of my form. Just a more elaborate version of built-in autocomplete field, really. So I added:

'#ajax' =&gt; array(
  'callback' =&gt; 'mymodule_tag',
  'wrapper' =&gt; 'edit-tags',
  'method' =&gt; 'replace',
  'effect' =&gt; 'fade',
  'event' =&gt; 'input',
),


The only problem is - it turns my field disabled when waiting for the server's reaction. This is unacceptable: User's input should never be blocked, that's a priority. I bet the solution is simple, but googling for it gives me a lot of results about how to disable field, and none about keeping it enabled. Too much noise for my search skills. Any suggestions?
I'm not sure I agree with your premise (interesting question, nonetheless). If performing a second operation while the first is already running would cause a problem client/server side, then that operation should definitely be blocked in my opinion.

If the only issue you have is that the blocking is done by way of disabling the text field, consider that it's just a matter of good UX. If the field wasn't disabled, but the functionality was, then there's no feedback to the user, who is left wondering why nothing's happening even though they're typing into a text field that has some rich functionality a few seconds earlier.

That said, if you want to override the behaviour of Drupal's AJAX have a look in the /misc/ajax.js file. You'll need to re-implement at least:


Drupal.ajax.prototype.beforeSend
Drupal.ajax.prototype.success
Drupal.ajax.prototype.error


Those functions set/remove the disabled attribute on the element. It should be reasonably straight forward to re-assign those functions in a custom JS file, and you can just remove lines like this:

$(this.element).addClass('progress-disabled').attr('disabled', true);


Or tweak it to something more palatable for your use case.