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

问题描述:

我有一个时间表表。在桌子底部有一个按钮,允许我添加一行。可以理解的是,新行中的所有单元格都是空的。 JavaScript使用:使用disabled = true动态创建输入字段将空值设置为零

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'; 

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

谢谢。

+0

没有必要使用'.setAttribute()'来操纵DOM nodex的属性。 'txtField.value = null'或'txtFld.disabled = true'可以正常工作。 – Pointy

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

在新的浏览器(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 

的“禁用”属性被视为一个布尔值,因此将其设定为任何字符串值(比空字符串其它)将其设置为true

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

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

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

每当你使文本字段,你禁用隐藏的输入,反之亦然。这样总有一些东西发布。

+0

我在txtFld.style.pointerEvents ='none'中添加了;没有结果。我仍然可以在输入字段中单击。它仍然不会让我输入任何内容,但我可以将闪烁的光标放在那里。 –

+0

@ReverendDovie您使用的是哪种浏览器?它适用于最新的Firefox和Chrome。 – Pointy

+0

不幸的是,我不得不在IE9中这样做。 –