当我玩<input type="range">时,Firefox只有在我们将滑块拖放到Chrome和其他滑块被拖动时触发onchange事件的新位置时才会触发onchange事件。
如何在Firefox中进行拖拽?
function showVal(newVal){
document.getElementById(“valBox”).innerHTML=newVal;
}
<span id=“valBox”></span>
<输入类型=“范围” min=“5” max=“10” step=“1” onchange=“showVal(this.value)”>
I'm posting this as an answer in case you are like me and cannot figure out why the range type input doesn't work on ANY mobile browsers. If you develop mobile apps on your laptop and use the responsive mode to emulate touch, you will notice the range doesn't even move when you have the touch simulator activated. It starts moving when you deactivate it. I went on for 2 days trying every piece of code I could find on the subject and could not make it work for the life of me. I provide a WORKING solution in this post.
移动浏览器和混合应用
Mobile browsers run using a component called Webkit for iOS and WebView for Android. The WebView/WebKit enables you to embed a web browser, which does not have any chrome or firefox (browser) controls including window frames, menus, toolbars and scroll bars into your activity layout. In other words, mobile browsers lack a lot of web components normally found in regular browsers. This is the problem with the range type input. If the user's browser doesn't support range type, it will fall back and treat it as a text input. This is why you cannot move the range when the touch simulator is activated.
点击这里阅读更多关于浏览器兼容性的内容
jQuery滑块
jQuery提供了一个滑块,以某种方式与触摸模拟工作,但它是起伏的,不是很光滑。它不能满足我,它可能不会为你,但你可以使它工作更顺利,如果你结合jqueryUi。
最佳解决方案:范围触摸
如果你在笔记本电脑上开发混合应用程序,有一个简单易用的库可以让范围类型输入与触摸事件一起工作。
这个库叫做Range Touch。
DEMO
有关此问题的更多信息,请查看这里的这个线程
为移动Safari (webkit)重新创建HTML5范围输入?
我把这个作为一个答案,因为它应该是它自己的答案,而不是一个不那么有用的答案下的评论。我发现这种方法比公认的答案要好得多,因为它可以将所有的js与HTML保存在一个单独的文件中。
由Jamrelian在他的评论中提供的答案。
$("#myelement").on("input change", function() {
//do something
});
不过要注意Jaime的这句话
只是注意,有了这个解决方案,在chrome你会得到两个调用的处理程序(一个每个事件),所以如果你关心,那么你需要防范它。
它会在你停止移动鼠标时触发事件,然后在你释放鼠标按钮时再次触发事件。
更新
对于导致功能两次触发的更改事件和输入事件,这几乎不是问题。
如果函数在输入时触发,则在触发change事件时不太可能出现问题。
当你拖动范围输入滑块时,输入会迅速触发。担心最后再触发一个函数调用,就像担心输入事件中的一滴水。
甚至包括更改事件的原因是为了浏览器兼容性(主要是IE)。