Once function not preventing behavior executing on AJAX update
The once method is a simple beast - it checks for a class of NAME-processed on the element (NAME being the string arg you pass it). If it doesn't find that class, it assumes this is the first execution; it runs the function, and adds the class to the element. When the code executes again, the class is there, so it doesn't run the function.

When your behaviour executes first time, there's no -processed class on the elements, so it gets added and your function executes. Everything's happy...

Then an AJAX call happens, and the textfields get replaced; they no longer have the -processed class on them, since they're new elements received from the from builder function, and once has no option but to start from scratch again, running the function and adding the class to the new elements.

2 ways you could solve this:


Keep using behaviours, and use your own flag:

(function ($) {
  var processed = false;

  Drupal.behaviors.ios2 = {
    attach: function (context, settings) {
      if (!processed) {
        $('#edit-arrival-date-datepicker-popup-1, #edit-departure-date-datepicker-popup-1', context).attr('disabled', true);
        processed = true;
    }
  };

})(jQuery);

Conclude that behaviours aren't appropriate for this particular op, and stick with jQuery.ready