动态创建disabled = true的输入字段将空值设置为零

时间:2014-01-27 15:22:16

标签: javascript disabled-input

我有一张时间表。在表的底部有一个按钮,允许我添加一行。可以理解的是,新行中的所有单元格都是空的。 JavaScript使用:

txtFld.setAttribute('value', '');

这样做。

但是,在某些情况下,我希望显示一些新字段但禁用,以便我(在这些情况下)添加:

txtFld.setAttribute('disabled', 'disabled');

问题是,在执行此操作时,在提交后,当表重新呈现自身时,所有这些空值都显示为零而不是空字符串。就计算而言,这很好,但我不想要零行。我想要空单元格。如果我取出残疾部分,它可以正常工作。

我暂时通过使用readonly而不是使用disabled来解决这个问题,这似乎给了我想要的结果。唯一的问题是,虽然文本字段仍然是不可编辑的,但用户可以将光标放在框内。我想要清洁工,“甚至不能点击这里”,残疾人给了我。

有关为什么禁用功能正在执行此操作以及如何在没有生成的零行的情况下使用禁用的任何想法?

为了记录,我混合并匹配了以下各项的组合:

txtFld.setAttribute('value','');
txt.setAttribute('value', null);
txtFld.value = '';
txtFld.value = null;

txtFld.setAttribute('disabled');
txtFld.setAttribute('disabled', 'true');
txtFld.setAttribute('disabled', 'disabled');
txtFld.disabled = 'true';
txtFld.disabled = 'disabled';

我每次都能想到相同的结果(或更糟)。

感谢。

1 个答案:

答案 0 :(得分:0)

禁用某个字段时,它不会包含在发送到服务器的表单参数中。

在新的浏览器(IE11 +,以及其他所有东西)中,您可以使用CSS来禁用元素上的指针事件:

txtFld.readonly = true;
txtFld.style.pointerEvents = 'none';

这会使元素无法响应任何点击。 (Here is a jsfiddle.)因为它没有被禁用,表单POST 将空字段发送到服务器。

您应该通过将DOM节点的“disabled”属性设置为true(布尔常量,而不是字符串)来禁用字段。

txtFld.disabled = true; // disables field
txtFld.disabled = false; // enables field

“disabled”属性被视为布尔值,因此将其设置为任何字符串值(空字符串除外)将其设置为true

txtFld.disabled = "false"; // disables field

利用真实的disabled浏览器行为可以做的另一件事是将空参数发布到服务器是使用输入对:

<input type=text name=whatever data-companion=whatever-c> <!-- visible input -->
<input type=hidden name=whatever id=whatever-c> <!-- invisible input -->

现在每当启用文本字段时,禁用隐藏的输入,反之亦然。这样就总会发布一些东西。