如何修复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如果在我死之前将其用作
    .valueAsNumber
    结束斜杠,则可能会失败(或“直到我使用模板系统而不是编写原始HTML的那一天)。@AndrewKoster结束斜杠从HTML开始就没有在任何地方指定,没有任何意义,什么都不做,浏览器被指示忽略它。因此,在所有情况下,包括结束斜杠都是毫无意义的。
    <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