如何修复javascript没有分配正确值的问题?
我正在尝试存储上次选择的小于如何修复javascript没有分配正确值的问题?,javascript,html,dom,Javascript,Html,Dom,我正在尝试存储上次选择的小于maxrange.value的值,并在滑块值不为真时使用它来更改滑块值。 当第一个值变为大于第二个值时,我希望它返回到小于第二个值的最后一个值 var minrange=document.getElementById(“滑块最小值”); var maxrange=document.getElementById(“滑块最大值”); 函数checkifvaluemin(){ if(minrange.valuemaxrange.value){ var lastvalue
maxrange.value
的值,并在滑块值不为真时使用它来更改滑块值。
当第一个值变为大于第二个值时,我希望它返回到小于第二个值的最后一个值
var minrange=document.getElementById(“滑块最小值”);
var maxrange=document.getElementById(“滑块最大值”);
函数checkifvaluemin(){
if(minrange.valuemaxrange.value){
var lastvaluemax=maxrange.value;
maxrange.value=lastvaluemax;
}
}
lastvaluemin
正在跳过数字2-9如果我了解您的要求,这应该是您想要的
我改变的是:
- 添加了大量日志记录,以便我们可以看到正在发生的事情
- 将最小/最大值记录为JSON,以便我们可以判断它们是字符串还是数字
- 使用
将最小/最大值转换为整数,以便比较结果有意义parseInt
- 你的第一个
语句的条件对我来说没有意义,所以我把它颠倒了if
- 在这两个
语句中,您将滑块的当前值分配给它自己。这永远不会有效果。我更改了它,以便为滑块指定另一个滑块的值,这允许它们相互限制if
<input id="slider-min" type="range" value="14" min="1" max="20" step="1" oninput="checkifvaluemin()"/> <input id="slider-max" type="range" value="16" min="1" max="20" step="1" oninput="checkifvaluemax()"/> <script> const minrange = document.getElementById("slider-min"); const maxrange = document.getElementById("slider-max"); function checkifvaluemin() { const min = parseInt(minrange.value); const max = parseInt(maxrange.value); console.log('min', JSON.stringify(min)); console.log('max', JSON.stringify(max)); if (min > max) { console.log('Checkifvaluemin min > max. Changing.'); minrange.value = max; } else { console.log('Checkifvaluemin min <= max. Doing nothing.'); } } function checkifvaluemax() { const min = parseInt(minrange.value); const max = parseInt(maxrange.value); console.log('min', JSON.stringify(min)); console.log('max', JSON.stringify(max)); if (min > max) { console.log('Checkifvaluemax min > max. Changing.'); maxrange.value = min; } else { console.log('Checkifvaluemax min <= max. Doing nothing.'); } } </script>
const minrange=document.getElementById(“滑块最小值”); const maxrange=document.getElementById(“滑块最大值”); 函数checkifvaluemin(){ const min=parseInt(minrange.value); const max=parseInt(maxrange.value); log('min',JSON.stringify(min)); log('max',JSON.stringify(max)); 如果(最小值>最大值){ log('Checkifvaluemin>max.Changing'); minrange.value=最大值; }否则{ log('Checkifvaluemin.max.Changing'); maxrange.value=min; }否则{
log('Checkifvaluemax-min根据OP提供的描述,我不能100%确定,因此我将根据我认为OP问题的内容进行概述- 最小范围输入属性
始终小于最大范围输入的min
属性min
- 最大范围输入属性
为了创建此行为,我们可以使用
始终大于最小范围输入的max
属性max
属性来调整oninput
属性。值通过min/max
标记显示
输入字段的最小值: 14
尺寸: 2. 最大值: 16
将是一个字符串。您需要先将其转换为一个数字,然后再尝试对其进行比较注意:.value
标记不使用、也不需要结束斜杠,而且在HTML中从未使用过。@p.s.w.g如果在我死之前将其用作
结束斜杠,则可能会失败(或“直到我使用模板系统而不是编写原始HTML的那一天)。@AndrewKoster结束斜杠从HTML开始就没有在任何地方指定,没有任何意义,什么都不做,浏览器被指示忽略它。因此,在所有情况下,包括结束斜杠都是毫无意义的。.valueAsNumber
<input id="slider-min" type="range" value="14" min="1" max="20" step="1" oninput="checkifvaluemin()"/> <input id="slider-max" type="range" value="16" min="1" max="20" step="1" oninput="checkifvaluemax()"/> <script> const minrange = document.getElementById("slider-min"); const maxrange = document.getElementById("slider-max"); function checkifvaluemin() { const min = parseInt(minrange.value); const max = parseInt(maxrange.value); console.log('min', JSON.stringify(min)); console.log('max', JSON.stringify(max)); if (min > max) { console.log('Checkifvaluemin min > max. Changing.'); minrange.value = max; } else { console.log('Checkifvaluemin min <= max. Doing nothing.'); } } function checkifvaluemax() { const min = parseInt(minrange.value); const max = parseInt(maxrange.value); console.log('min', JSON.stringify(min)); console.log('max', JSON.stringify(max)); if (min > max) { console.log('Checkifvaluemax min > max. Changing.'); maxrange.value = min; } else { console.log('Checkifvaluemax min <= max. Doing nothing.'); } } </script>
oninput= // min range max property is at least 1 less than max range max property minIN.max = maxIN.valueAsNumber-1, // max range min property is at least 1 more than min range min property maxIN.min = minIN.valueAsNumber+1, // displays the difference between min and max minMax.value = maxIN.valueAsNumber - minIN.valueAsNumber
oninput= // The <output> of min and max ranges are synced to react when either one gets user input // A poor man's two-way data-binding minOUT.value = this.value, maxOUT.value = maxIN.value ... maxOUT.value = this.value, minOUT.value = minIN.value
- 最小范围输入属性