как обеспечить отправку поля формы <select>, когда оно отключено?

<p>у меня есть поле формы <code>select</code>, которое я хочу пометить как "только для чтения", так как пользователь не может изменить значение, но значение все еще передается вместе с формой. использование атрибута <code>disabled</code> не позволяет пользователю изменять значение, но не передает значение вместе с формой.</p><p>атрибут <code>readonly</code> доступен только для полей <code>input</code> и <code>textarea</code>, но это в основном то, что я хочу. есть ли способ заставить это работать?</p><p>я рассматриваю две возможности:</p><ul> <li>вместо отключения <code>select</code> отключите все <code>option</code>s и используйте css, чтобы выделить выбор серым, чтобы он выглядел как отключенный.</li> <li>добавьте обработчик событий щелчка к кнопке отправки, чтобы включить все отключенные раскрывающиеся меню перед отправкой формы.</li> </ul>

<pre><code><select disabled="disabled"> .... </select> <input type="hidden" name="select\_name" value="selected value" /> </code></pre><p>где <code>select\_name</code> - это имя, которое вы обычно даете <code><select></code>.</p><p>другой вариант.</p><pre><code><select name="myselect" disabled="disabled"> <option value="myselectedvalue" selected="selected">my value</option> .... </select> <input type="hidden" name="myselect" value="myselectedvalue" /> </code></pre><p>теперь, с этим, я заметил, что в зависимости от того, какой веб-сервер вы используете, вам, возможно, придется поместить вход <code>hidden</code> либо до, либо после <code><select></code>.</p><p>если моя память мне не изменяет, с iis вы ставите ее раньше, с apache - после. как всегда, тестирование является ключевым.</p>

<p>отключите поля, а затем включите их до отправки формы:</p><p>код jquery:</p><pre><code>jquery(function ($) { $('form').bind('submit', function () { $(this).find(':input').prop('disabled', false); }); }); 

я искал решение для этого, и так как я не нашел решения в этой теме, я сделал свое собственное.// with jquery $('#selectbox').focus(function(e) { $(this).blur(); }); проще говоря, вы просто размываете поле, когда сосредотачиваетесь на нем, что-то вроде отключения его, но вы фактически отправляете его данные.

он не работает с: входным селектором для полей выбора, используйте это: jquery(function() { jquery('form').bind('submit', function() { jquery(this).find(':disabled').removeattr('disabled'); }); }); 

я столкнулся с немного другим сценарием, в котором я только хотел запретить пользователю изменять выбранное значение на основе более раннего окна выбора. в итоге я просто отключил все остальные невыбранные параметры в окне выбора, используя$('#toselect')find(':not(:selected)').attr('disabled','disabled'); </code></pre>

<p>я использую следующий код для отключения параметров в выборках</p><pre><code><select class="sel big" id="form\_code" name="code" readonly="readonly"> <option value="user\_played\_game" selected="true">1 game</option> <option value="coins" disabled="">2 object</option> <option value="event" disabled="">3 object</option> <option value="level" disabled="">4 object</option> <option value="game" disabled="">5 object</option> </select> // disable selection for options $('select option:not(:selected)').each(function(){ $(this).attr('disabled', 'disabled'); }); </code></pre>

<p> <a href="https://stackoverflow.com/questions/1191113/disable-select-form-field-but-still-send-the-value/1191365#1191365">то же решение, предложенное tres</a> без использования jquery</p><pre><code><form onsubmit="document.getelementbyid('mysel').disabled = false;" action="..." method="get"> <select id="mysel" disabled="disabled">....</select> <input name="submit" id="submit" type="submit" value="send form"> </form> </code></pre><p>это может помочь кому-то понять больше, но, очевидно, менее гибко, чем jquery.</p>

<p>просто добавьте строку перед отправкой.</p><blockquote> <p>$ ( "# xyz") removeattr ( "отключено"). </blockquote>

я создал быстрый плагин (только для jquery), который сохраняет значение в поле данных, пока ввод отключен. это просто означает, что пока поле программно отключено с помощью jquery с использованием .prop () или .attr () ... тогда доступ к значению с помощью .val (), .serialize () или .serializearra () всегда будет возвращать значение, даже если отключено :)бесстыдный плагин: <a href="https://github.com/jezternz/jq-disabled-inputs">https://github.com/jezternz/jq-disabled-inputs 

я нашел работоспособное решение: удалите все элементы, кроме выбранного. затем вы можете изменить стиль на что-то, что выглядит отключенным. используя jquery:jquery(function($) { $('form').submit(function(){ $('select option:not(:selected)', this).remove(); }); }); </code></pre>

<p>основываясь на решении jordan, я создал функцию, которая автоматически создает скрытый ввод с тем же именем и тем же значением выбора, который вы хотите сделать недействительным. первый параметр может быть идентификатором или элементом jquery; второй является логическим необязательным параметром, где "true" отключает, а "false" включает ввод. если опущен, второй параметр переключает выбор между "включен" и "отключен".</p><pre><code>function changeselectusermanipulation(obj, disable){ var $obj = ( typeof obj === 'string' )? $('#'+obj) : obj; disable = disable? !!disable : !$obj.is(':disabled'); if(disable){ $obj.prop('disabled', true) .after("<input type='hidden' id='select\_user\_manipulation\_hidden\_"+$obj.attr('id')+"' name='"+$obj.attr('name')+"' value='"+$obj.val()+"'>"); }else{ $obj.prop('disabled', false) .next("#select\_user\_manipulation\_hidden\_"+$obj.attr('id')).remove(); } } changeselectusermanipulation("select_id"); 

<select id="example"> <option value="">please select</option> <option value="0" >one</option> <option value="1">two</option> </select> if (condition){ //you can't select $("#example").find("option").css("display","none"); }else{ //you can select $("#example").find("option").css("display","block"); } </code></pre>