$ _POST用于禁用选择

时间:2011-08-30 14:22:28

标签: php html post

<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']中删除已禁用的内容正在显示正确的结果

4 个答案:

答案 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变量一起发送,则您希望对当前选项使用选项“选择”值,并在所有其他选项上“禁用”。这实际上将显示选择及其所有选项,但仅允许选择当前选项。

我发现这比简单地禁用选择更为有用。

正如其他人指出的那样,您仍然需要确保服务器端不接受对该字段的更改(与任何只读字段一样)。