1

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

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

这样做。

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

txtFld.setAttribute('disabled', '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';

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

谢谢。

4

1 回答 1

0

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

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

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

这将使元素根本不响应任何点击。(这是一个 jsfiddle。)因为它没有被禁用,所以表单 POST会将空字段发送到服务器。

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

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

“禁用”属性被视为布尔值,因此将其设置为任何字符串值(空字符串除外)将其设置为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 -->

现在,无论何时启用文本字段,都会禁用隐藏输入,反之亦然。这样总有东西贴出来。

于 2014-01-27T15:26:12.993 回答