Правильный способ достичь желаемой функциональности - просто удалить опции. Как вы обнаружили, сложный путь, отключение отдельных опций не особенно хорошо поддерживается в разных браузерах. Я просто проснулся и чувствую, что программирую что-то, поэтому я включил небольшой плагин, чтобы легко фильтровать выборку на основе выбранного идентификатора радио. Хотя остальные решения выполнят свою работу, если вы планируете делать это в своем приложении, это должно помочь. Если нет, то я думаю, что это касается кого-то еще. Вот код плагина, который вы можете где-то спрятать:
jQuery.fn.filterOn = function(radio, values) {
return this.each(function() {
var select = this;
var options = [];
$(select).find('option').each(function() {
options.push({value: $(this).val(), text: $(this).text()});
});
$(select).data('options', options);
$(radio).click(function() {
var options = $(select).empty().data('options');
var haystack = values[$(this).attr('id')];
$.each(options, function(i) {
var option = options[i];
if($.inArray(option.value, haystack) !== -1) {
$(select).append(
$('<option>').text(option.text).val(option.value)
);
}
});
});
});
};
А вот как это использовать:
$(function() {
$('#theOptions').filterOn('input:radio[name=abc123]', {
'abc': ['a','b','c'],
'123': ['1','2','3']
});
});
Первый аргумент - это селектор для группы радиостанций, второй - словарь, в котором ключами являются идентификаторы радиосвязи, а значение - это массив значений параметров выбора, которые должны остаться. Есть много вещей, которые можно было бы сделать, чтобы абстрагироваться дальше, дайте мне знать, если вы заинтересованы, и я, конечно, могу это сделать.
Вот демонстрация этого в действии .
РЕДАКТИРОВАТЬ : Кроме того, забыли добавить, согласно документации jQuery :
В jQuery 1.3 селекторы стиля [@attr] были удалены (ранее они не использовались в jQuery 1.2). Просто уберите символ «@» из ваших селекторов, чтобы они снова заработали.