<select class="txtbx1" name="country" disabled>
<option value='FR' >FRANCE</option><option value='CH' selected>SWITZERLAND</option>
</select>
上面的代码位于其方法为post
的表单中但是echo $_POST['country']
没有显示任何内容..另一方面,如果我从select $_POST['country']
中删除已禁用的内容正在显示正确的结果
答案 0 :(得分:23)
这就是disabled
属性的工作原理。禁用表单控件后,在提交表单时将忽略该值,并且该密钥将不会出现在$_POST
(或$_GET
)中。
如果您希望该值存在于提交的数据中,但您不希望用户能够更改页面上的值(我想象的是您要实现的目标),请使用{{1而不是readonly="readonly"
。
修改强>
disabled="disabled"
元素没有<select>
属性。上述信息仍然有效,因为将适用于readonly
和<input>
s。
此处问题的解决方案是禁用选择并使用隐藏输入将值发送回服务器 - 例如
启用选择时:
<textarea>
......当它被禁用时:
<select class="txtbx1" name="country">
<!-- options here -->
</select>
答案 1 :(得分:5)
这是正确的行为。 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;
}
}
});
答案 2 :(得分:0)
表单标签的外观如何?您可能忘记了method="post"
属性...
答案 3 :(得分:0)
如果您的目标是“只读选择”,即在不更改选项的情况下向用户显示选择的内容,并将其与POST变量一起发送,则您希望对当前选项使用选项“选择”值,并在所有其他选项上“禁用”。这实际上将显示选择及其所有选项,但仅允许选择当前选项。
我发现这比简单地禁用选择更为有用。
正如其他人指出的那样,您仍然需要确保服务器端不接受对该字段的更改(与任何只读字段一样)。