今天遇到了一个很奇怪的问题:在ios手机上,如果页面出现滚动条,点击select元素的时候,偶尔会出现 “ 页面上的某一个输入框自动获得焦点 “ 的问题。
这个问题困扰我好久,一直找不到答案,今天终于有点头绪。
- 问题重现的前提:
1:页面有selec标签
2:有input标签
3:y轴有滚动条
- 问题的原因是:
点击select,触发touchstart事件,页面的滚动条会往顶部滚,事件进行冒泡
滚动完成后,点击的位置就是输入框所在的位置,
之后,由于事件冒泡,触发父元素的click事件,
之后输入框获得焦点
- 解决方案:
给select元素绑定touchstart事件,在事件里面阻止事件冒泡
$(‘select’).on('touchstart',function(e){
e.stopPropagation();
});