禁用输入的值将不会被提交

这是我用Firebug在Firefox中找到的。

Values of disabled inputs will not be submitted

在其他浏览器中也一样吗?

如果有,原因是什么?

243581 次浏览

是的,所有浏览器不应该提交禁用的输入,因为它们是只读的。

更多的信息(章节17.12.1)

属性定义

disabled [CI]当为窗体控件设置时,此布尔属性 禁用用户输入控件。设置时,禁用属性

  • 禁用控件无法接收焦点。
  • 在选项卡导航中跳过禁用控件。
  • 禁用控件无法成功。
以下元素支持disabled属性:BUTTON, INPUT,

. OPTGROUP, OPTION, SELECT和TEXTAREA

此属性是继承的,但本地声明将覆盖 继承的值。< / p > 禁用元素的呈现方式取决于用户代理。为 例如,某些用户代理“灰色退出”;禁用菜单项,按钮 标签等。< / p >

在本例中,INPUT元素被禁用。因此,它不能 receive user input 它的值也不会随表单一起提交.

.

.

.
<INPUT disabled name="fred" value="stone">
< p >。动态修改禁用的值的唯一方法 属性是通过脚本实现的

它们不会被提交,因为这是W3C规范中所说的

17.13.2成功控制

一个成功的控件是“有效的”;提交。(剪)

  • 被禁用的控件无法成功执行。

换句话说,规范说禁用的控件被认为是无效的。

disabled输入将不提交数据。

使用readonly属性:

<input type="text" readonly />

Source here .

Disabled控件不能成功,成功的控件可以“有效”提交。 这就是禁用控件不能随表单一起提交的原因

你可以用三个东西来模仿disabled:

  1. readonly属性(这样输入中的值可以在表单提交时使用。用户也不能改变输入值)

  2. CSS: 'pointer-events':'none'(阻止用户点击输入)

  3. HTML: tabindex="-1"(阻止用户从键盘导航到输入)

选择控件仍然是可点击的,即使在只读attrib

如果你仍然想禁用控件,但你想发布它的值。 您可以考虑创建一个隐藏字段。

.使用与控件相同的值

然后创建一个jquery,选择更改

$('#your_select_id').change(function () {
$('#your_hidden_selectid').val($('#your_select_id').val());
});

有两个属性,即readonlydisabled,可以创建半只读输入。但是它们之间有一个微小的区别。

<input type="text" readonly />
<input type="text" disabled />
  • readonly属性使您的输入文本被禁用,用户不能再更改它。
  • disabled属性不仅使你的输入文本禁用(不可更改),而且还使你的输入文本不能提交吗?

jQuery方法(1):

$("#inputID").prop("readonly", true);
$("#inputID").prop("disabled", true);

jQuery方法(2):

$("#inputID").attr("readonly","readonly");
$("#inputID").attr("disabled", "disabled");

JavaScript方法:

document.getElementById("inputID").readOnly = true;
document.getElementById("inputID").disabled = true;

PS disabledreadonly是标准的html属性。由jQuery 1.6引入的prop

这里是解决方案,仍然使用禁用属性。

$(document).ready(function(){
$("formselector:input").prop("disabled",true);
$( "formselector" ).submit(function( event ) {
$(":disabled").prop("disabled",false);
});
});

在提交时启用所有这些。这将确保一切都张贴

<input type="text" disabled />

使用readonly代替这个禁用

<input type="text" readonly />