После длительных пыток, было выяснено, что нужно что-то типа такого:
var citiesContainer = $('#cities')
// вешаем обработчик, который слушает все селекты, у который name начинается на city
// причем не на focus а на change, т.е. фокус без выбора не сбросит ничего.
citiesContainer.on('change', 'select[name^="city"]', myOnfocusHandler)
function myOnfocusHandler() {
var changedSelect = this // select в котором произошло событие change
if ($(changedSelect).val() !== '') { // если что-то выбрано
citiesContainer.find('select[name^="city"]').each(function(){ // проходим по всем селектам
if (this !== changedSelect) { // кроме того где произошло событие change
$(this).find('option').removeAttr('selected') // сбрасываем выбранные опции
}
})
}
}
Демо:
https://jsfiddle.net/hjjp9n04/
Но я осмелюсь еще раз предложить select2 или choosen с автодополнением