20

私はJavascriptから始めて、この関数を書きました:

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

これは、最初のフィールドが入力されている場合、cantidadCopiasという名前の2番目のフィールドを無効にします。

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

ただし、最初のフィールドが入力されたときに2番目のフィールドが無効になるわけではありません。

4

3 に答える 3

29

コンソールを見ましたか?

  • Uncaught SyntaxError: Unexpected token )
  • Uncaught 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;
}​
于 2012-10-15T13:38:06.590 に答える
2

onkeyup()の代わりに使用すると最適ですonkeydown()。問題は、キーダウン イベントで入力の値が更新されないことです。

フィドル

<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  );
}
于 2012-10-15T13:48:04.090 に答える
1

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の場合は、再度有効にする必要があります。

それ以外に、onkeydownではなくonkeyupをフックする必要があります。

ここで試すことができます:jsfiddle.net/DBJfN/

于 2012-10-15T13:43:19.790 に答える