2012-10-15 19 views
10

Zaczynam JavaScript, napisałem tę funkcję:Jak wyłączyć pole wejściowe za pomocą JavaScript?

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

co wyłącza drugie pole o nazwie cantidadCopias jeśli pierwszy jest wypełniony.

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

Ale nie wyłącza drugiego pola, gdy pierwszy jest wypełniony.

+2

pan zapomniał powiedzieć nam, gdzie jest twój problem. Jakie jest twoje pytanie? – feeela

+1

Ktoś ma problem z pisownią document.getElementById ("valorFinal") Długość <- length – epascarello

+0

Niestety, edytowałem pytanie. – JorgeeFG

Odpowiedz

15

Czy patrzysz na konsolę?

  • Uncaught SyntaxError: Nieoczekiwany token)
  • Uncaught ReferenceError: disableField nie jest zdefiniowana

Pierwszy raz miałeś błąd ortograficzny, teraz Twój kod ma dodatkowy )

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

Teraz następnym problemem jest to, że nie patrzysz na długość wartości.

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

więc kod powinien wyglądać

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

ale teraz jak to jest napisane, gdy jest on wyłączony, to nie zostanie ponownie włączona.

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

Dzięki, że teraz działa, przepraszam, jestem nowicjuszem. – JorgeeFG

+1

Uwielbiam, że mam do tego zdanie. :) – epascarello

+0

Podoba mi się, jak skopiowałeś ostatnią część./ ironia – GottZ

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

należy również włączyć ją ponownie, gdy długość wejście jest 0 ponownie.

oprócz tego powinieneś podłączyć się onkeyup, a nie onkeydown.

można spróbować tutaj: jsfiddle.net/DBJfN/

+0

Dzięki, sprawa na klucz rozwiązał problem, który miałem z polem, który nie był aktywowany, aż do ponownego naciśnięcia klawisza Del (gdy był pusty). – JorgeeFG

+0

bez problemu. onblur może być również dla Ciebie interesujący na wypadek, gdyby ktoś kliknął gdzieś trzymając wciśnięty klawisz (przed uruchomieniem onkeyup) – GottZ

2

Najlepiej jest, jeśli używasz onkeyup() zamiast onkeydown(). Problem polega na tym, że wartość wejścia nie jest aktualizowana na zdarzeniu 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 )? true:false; 
} 
+0

console.log nie jest dostępny w przeglądarkach bez dołączonego debuggera. (firefox lub IE bez otwartej konsoli dev jako przykładu) poza tym, że cała twoja odpowiedź została już opublikowana. – GottZ

+0

Skomentował 'console.log()' jest bardziej czyściutki niż inni. :) – Bob