Демо: http://jsfiddle.net/dZqEu/
$('select').change(function() {
var value = $(this).val();
$(this).siblings('select').children('option').each(function() {
if ( $(this).val() === value ) {
$(this).attr('disabled', true).siblings().removeAttr('disabled');
}
});
});
Вы можете предпочесть эту версию кода:
$('select').change(function() {
$(this)
.siblings('select')
.children('option[value=' + this.value + ']')
.attr('disabled', true)
.siblings().removeAttr('disabled');
});
Демонстрационная версия: http://jsfiddle.net/dZqEu/2/
Обратите внимание, что эта вторая версия содержит одну строку (одну строку кода), но я отформатировал ее, чтобы она была более читабельной. Мне больше нравится эта вторая версия.
Также обратите внимание, что в моем коде предполагается, что эти два поля SELECT являются родственными элементами DOM. Если это не ваш случай, то этот код - $(this).siblings('select')
- не будет работать для вас, и вам придется использовать методы обхода jQuery, чтобы перейти к другому полю SELECT.
В наихудшем сценарии - когда блоки SELECT находятся далеко друг от друга в дереве DOM и обход не будет эффективным - вы можете просто присвоить им атрибуты ID и использовать этот код для выбора другого поля:
$('#select1, #select2').not(this)
Демонстрационная версия: http://jsfiddle.net/dZqEu/3/