如何使用 Javascript 禁用输入字段?

Posted

技术标签:

【中文标题】如何使用 Javascript 禁用输入字段?【英文标题】:How to disable an input field using Javascript? 【发布时间】:2012-10-05 11:46:08 【问题描述】:

我从 javascript 开始,我写了这个函数:

function disableField() 
  if( document.getElementById("valorFinal").length > 0 ) ) 
    document.getElementById("cantidadCopias").disabled = true; 
  

如果第一个字段已填满,则会禁用名为 cantidadCopias 的第二个字段。

<label> <span>Valor final:</span>
  <input type="text" class="input_text" name="valorFinal" id="valorFinal" onkeydown="disableField()"/>
</label>
<label> <span>Cantidad de Copias:</span>
  <input type="text" class="input_text" name="cantidadCopias" id="cantidadCopias"/>
</label>

但是当第一个字段被填充时,它不会禁用第二个字段。

【问题讨论】:

有人拼写有问题 document.getElementById("valorFinal").lenght 您忘记告诉我们您的问题出在哪里。我们的问题是什么? 对不起,我已经编辑了问题。 你应该挂钩 onkeyup 而不是 onkeydown。此外,当第一个输入的长度再次达到 0 时,您应该再次启用第二个输入。以我的回答为例。 【参考方案1】:

你看控制台了吗?

Uncaught SyntaxError: Unexpected token ) 未捕获的 ReferenceError:未定义 disableField

第一次出现拼写错误,现在您的代码多了一个)

function disableField() 
  if( document.getElementById("valorFinal").length > 0 ) )   <-- extra )
    document.getElementById("cantidadCopias").disabled = true; 
  
​

现在下一个问题是您没有查看值的长度。

if( document.getElementById("valorFinal").length > 0 )  <-- you are looking at the length of the html DOM Node.

所以代码应该是这样的

function disableField() 
  if( document.getElementById("valorFinal").value.length > 0 )  
    document.getElementById("cantidadCopias").disabled = true; 
  
​

但是现在是怎么写的,一旦禁用,就不会再启用了。

function disableField() 
    var isDisabled = document.getElementById("valorFinal").value.length > 0; 
    document.getElementById("cantidadCopias").disabled = isDisabled;
​

【讨论】:

我喜欢你复制最后一部分的方式。 /讽刺 @Jan-StefanJanetzky 我没有复制你的任何东西。认为我做到了,恭维自己。【参考方案2】:

最好使用onkeyup() 而不是onkeydown()。问题是输入的值没有在 keydown 事件上更新。

Fiddle

<label> 
  <span>Valor final:</span>
  <input type="text" class="input_text" name="valorFinal" id="valorFinal" onkeyup="disableField(this.value)"/>
 </label>
<label> 
  <span>Cantidad de Copias:</span>
  <input type="text" class="input_text" name="cantidadCopias" id="cantidadCopias"/>
</label>

javascript

function disableField(val) 
    var cantidadCopias = document.getElementById("cantidadCopias");
    cantidadCopias.disabled = ( val.length > 0  );

【讨论】:

console.log 在没有附加调试器的浏览器中不可用。 (例如,没有打开开发控制台的 Firefox 或 IE)除此之外,您的整个答案已经发布。 注释掉了console.log(),它可能比其他的更干净。:) @Bob 你不需要三元运算,因为val.length &gt; 0 本身就是一个布尔值。【参考方案3】:

javascript:

var disableField = function () 
  var state = document.getElementById("valorFinal").value.length > 0;
  document.getElementById("cantidadCopias").disabled = state;
​;​

html:

<label> <span>Valor final:</span>
  <input type="text" class="input_text" name="valorFinal" id="valorFinal" onkeyup="disableField()"/>
</label>
<label> <span>Cantidad de Copias:</span>
  <input type="text" class="input_text" name="cantidadCopias" id="cantidadCopias"/>
</label>​

当输入长度再次为0时,您也应该再次启用它。

此外,您应该挂钩 onkeyup 而不是 onkeydown。

你可以在这里试试:jsfiddle.net/DBJfN/

【讨论】:

谢谢,onkeyup 解决了我在再次按下 Del 键(当它为空时)之前无法启用字段的问题。 没问题。 onblur 也可能对您感兴趣,以防有人在按住键时单击某处(在 onkeyup 被解雇之前)

以上是关于如何使用 Javascript 禁用输入字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在提交后禁用输入字段

如何使用JavaScript只读输入字段?

如何禁用特定输入字段的自动填充

在AngularJS中选择一个输入字段时如何禁用一个输入字段? (都使用相同的 ng 模型)

如何禁用提交按钮,直到所有文本字段都已满并选择文件

如何根据垫单选按钮的值禁用垫输入字段?