Tenho duas entradas de alcance. A primeira nunca deve ser maior que a segunda, e a segunda nunca deve ser menor que a primeira.
O problema com meu script é que os controles deslizantes pulam ou se encaixam no mínimo ou máximo. Funciona perfeitamente se eu alterar o limite para um número fixo, mas não com o valor de entrada...
Aqui está um exemplo do que tentei:
function minRange(input) {
let limit = document.getElementById('max').value;
if(input.value >= limit) {
input.value = limit;
};
};
function maxRange(input) {
let limit = document.getElementById('min').value;
if(input.value <= limit) {
input.value = limit;
};
};
<div><input id="min" type="range" min="0" max="100" value="0" step="1" onInput="minRange(this)" /></div>
<div><input id="max" type="range" min="0" max="100" value="100" step="1" onInput="maxRange(this)" /></div>
É porque
.value
retorna uma string, então você está fazendo uma comparação de strings (o que significa que "1" >= "100" é verdadeiro, o que não é o que você quer). Você pode obter versões numéricas do seu valor com.valueAsNumber
em vez de.value
:Como alternativa, você pode continuar a usar
.value
e, em seguida, usar o operador unário mais + ,Number()
a função ouparseInt(value, 10)
para converter seu valor em um valor numérico.