address field hides if country is changed
It works as designed.
For some countries there is no need to enter ZIP code.

You can change this behavior by implementing this alter in your custom module:

/**
 * Allows modules to alter the predefined address formats.
 *
 * @param $address_formats
 *   The array of all predefined address formats.
 *
 * @see addressfield_get_address_format()
 */
function hook_addressfield_address_formats_alter(&amp;$address_formats) {
  $address_formats['AF']['required_fields'] = array('postal_code');
  $address_formats['AF']['used_fields'] = array('administrative_area', 'postal_code');
}


Change required_fields and used_fields as desired.
More code you can find in this file:

addressfield/addressfield.address_formats.inc