<select class="txtbx1" name="country" disabled> <option value='FR' >FRANCE</option><option value='CH' selected>SWITZERLAND</option> </select>
приведенный выше код находится внутри формы, метод которой отправляется
но echo $_POST['country']
ничего не показывает .. с другой стороны, если я удалю отключить из select $_POST['country']
, покажет правильный результат
Так работает атрибут disabled
. Когда элемент управления формы отключен, значение будет проигнорировано при отправке формы, и ключ не будет присутствовать в $_POST
(или $_GET
).
Если вы хотите, чтобы значение присутствовало в представленных данных, но вы не хотите, чтобы пользователь мог изменять значение на странице (что, я думаю, это то, что вы пытаетесь добиться), используйте readonly="readonly"
вместо disabled="disabled"
.
РЕДАКТИРОВАТЬ
Элемент <select>
не имеет атрибута readonly
. Вышеупомянутая информация по-прежнему сохраняется, так как она будет работать для <input>
s и <textarea>
s.
Решение вашей проблемы здесь было бы отключить выбор и использовать скрытый ввод для отправки значения обратно на сервер – например
Когда выбор включен:
<select class="txtbx1" name="country"> <!-- options here --> </select>
… и когда он отключен:
<select class="txtbx1" name="country_disabled" disabled="disabled"> <!-- options here, with appropriate value having `selected="selected"` --> </select> <input type="hidden" name="country" value="value_of_field" />
Это правильное поведение. disabled
отключает элемент и не отправляет его при отправке формы.
Вы можете использовать JavaScript, чтобы отключить форму перед отправкой. Что-то вроде этого (непроверено):
document.getElementById('myForm').addEventListener('submit', function() { for(var i = 0; i < this.children.length; i++){ var child = this.children[i]; if(child.disabled){ child.disabled = false; } } });
Как выглядит ваш тег формы? Возможно, вы забыли атрибут method="post"
…