EDGE浏览器 - 首次单击滑块轨道时,自定义输入类型=“范围”值不会更改

问题描述 投票:0回答:1

我有一个创建定制范围输入引用this。它在Chrome,IE和EDGE上运行良好,但是,EDGE存在一个问题。滑块轨道上的第一次单击会更改拇指位置,但不会更改值。随后的点击工作正常。

请在EDGE中打开此fiddle以观察此行为。

HTML: 

<input id="sel" type="range" min="5" max="100" value="50" step="5">
<h3>Slider Value: <span id="range"></span></h3>

JS:

(function () {
  var sel = document.querySelector('#sel');
  document.querySelector('#range').innerText = sel.value;
  sel.addEventListener('change', function (){
    document.querySelector('#range').innerText = sel.value;
  });
})()

CSS:

#sel {
  width:500px;
}

input[type=range] {
 -webkit-appearance: none;
 margin: 18px 0;
 width: 100%;
}
input[type=range]:focus {
 outline: none;
} 

input[type=range]::-webkit-slider-runnable-track {
 width: 100%;
 height: 8.4px;
 cursor: pointer;
 box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
 background: #3071a9;
 border-radius: 1.3px;
 border: 0.2px solid #010101;
}
input[type=range]::-webkit-slider-thumb {
 box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
 border: 1px solid #000000;
 height: 30px;
 width: 30px;
 border-radius: 100%;
 background: #ffffff;
 cursor: pointer;
 -webkit-appearance: none;
}
input[type=range]:focus::-webkit-slider-runnable-track {
 background: #367ebd;
}

input[type=range]::-ms-track {
 width: 100%;
 height: 8.4px;
 cursor: pointer;
 background: transparent;
 border-color: transparent;
 border-width: 16px 0;
 color: transparent;
}
input[type=range]::-ms-fill-lower {
 background: #2a6495;
 border: 0.2px solid #010101;
 border-radius: 2.6px;
 box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-fill-upper {
 background: #3071a9;
 border: 0.2px solid #010101;
 border-radius: 2.6px;
 box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 30px;
  width: 30px;
  border-radius: 100%;
  background: #ffffff;
  cursor: pointer;
}
input[type=range]:focus::-ms-fill-lower {
  background: #3071a9;
}
input[type=range]:focus::-ms-fill-upper {
  background: #367ebd;
} 

感谢您的帮助。

css html5 microsoft-edge
1个回答
0
投票

从处理change事件切换到处理input似乎解决了这个问题:

sel.addEventListener('input', function (){
    document.querySelector('#range').innerText = sel.value;
});

https://jsfiddle.net/tz1mhys0/

似乎仍然可以在Chrome中使用,我目前无法测试的其他浏览器。如果你发现一个input无效的地方,我想为这两个事件添加处理程序也可能不会造成太大的伤害。

© www.soinside.com 2019 - 2024. All rights reserved.