2012-08-15 1 views
8

Есть ли атрибут или метод для полей выбора HTML, эквивалентный readOnly="true" для входов HTML?ReadOnly Equivalent для элементов HTML Select

У меня есть поле выбора формы, которое я хотел бы отключить, но все равно передаю, когда форма отправлена. Если бы это был вход HTML, я бы что-то вроде этого

$('select_id').setAttribute('readOnly', 'true'); 

и браузер будет оказывать поле как не-редактируемые, но это значение равно будет принят в бэкэнд. Я хотел бы что-то подобное для HTML-select, но следующее:

$('#select_id').setAttribute('readOnly', 'true'); 

не работает. Атрибут успешно добавлен в DOM, но браузер по-прежнему делает его доступным.

Я понимаю, что я мог бы сделать следующий

$('#input_id').disabled(); 

, но когда поле отключено его значение не передается через бэкэнд.

Я хотел бы отключить это поле выбора, но все же перейти к серверу.

(примеры использование Prototype JS, но я заинтересован в любом общем решении)

ответ

22

Отключить все, кроме выбранного варианта:

<select> 
<option disabled="disabled">1</option> 
<option selected="selected">2</option> 
<option disabled="disabled">3</option> 
</select> 

Таким образом, ниспадающий до сих пор работает (и передает его значение), но пользователь не может выбрать другое значение.

+2

Не уверен, что кто вниз проголосовали и почему, это, кажется, работает (по крайней мере, в Chrome, тестирование других браузеров прямо сейчас) –

+3

@AlanStorm, это адский тест :)) –

+2

Проблема с этим решением заключается в том, что пользователь все еще может отменить выбор с помощью CTRL + нажмите –

3

добавить инвалидов класс:

.disabled{ 
    color: grey; 
} 

если класс присутствует польза предотвратить дефолт по фокуса и на мыши, и ДВМ нажмите:

$('#el').bind('click dblclick focus').function(event){ 
    if ($(this).hasClass('disabled')) event.preventDefault(); 
}); 
+4

Стоит отметить, что будущие googlers , этот пример, как представляется, g jQuery. –

Смежные вопросы