如何让JavaScript中onclick触发的函数立即执行?
解决输入框点击时光标固定延迟的问题
你的问题出在onclick事件的触发时机上:onclick要等鼠标按下再松开后才会执行,而且浏览器会先完成点击输入框的默认行为——把光标定位到你点击的位置,之后才会运行你的setSelectionRange代码,所以会有明显的延迟感。
改用mousedown事件就能解决这个问题,因为它会在浏览器处理默认光标定位之前触发,配合阻止默认行为,就能让光标直接固定到你想要的位置,完全没有延迟:
input.addEventListener('mousedown', function(e) { // 阻止浏览器默认的光标定位逻辑 e.preventDefault(); // 固定光标到输入框起始位置 input.setSelectionRange(0, 0); // 手动让输入框获得焦点(阻止默认行为后不会自动聚焦) input.focus(); });
如果还要处理通过Tab键等方式聚焦输入框的场景,可以再加一个focus事件监听,确保任何时候聚焦都固定光标:
input.addEventListener('focus', function() { input.setSelectionRange(0, 0); });
内容的提问来源于stack exchange,提问作者Thomas Stanley
相关产品推荐
相关产品推荐

