Вот это sel.options[sel.selectedIndex].value, можно заменить на sel.value;
А вот это id=\"subcat\", а затем еще id=\"subcat\", неверно, нельзя помещать на страницу объекты с одинаковыми id. И name=\"subcat\">", и name=\"subcat\">", это как? Даже если вы используете Ajax, отправляя каждый элемент формы отдельно, то как сервер определит по одному и тому же имени источник запроса? В случае же обычной отправки формы вы получите значение последнего списка subcat.
И лучше так:
$select_contry_city .= ' / <select id="sub_1" name="subcat_?"><option value="0">Выберите подкатегорию</option></select>';
Это избавит парсер от бесполезного разбора строки. Для браузера \n не нужен, да и лучший HTML это одна строка без мусора, посмотреть же структуру кода можно и в отладчике.
Насчет открываться вместе, то что бы это значило - они есть на странице уже или же списки динамические, построение каждого, это предварительный запрос сервера?