某些业务在处理input的输入框的触发oninput时间,需要控制光标位置,此方法依赖于jQuery
/* 定位光标 */ function setCaretPosition(ctrl, pos){ if(ctrl.setSelectionRange) { ctrl.focus(); ctrl.setSelectionRange(pos,pos); } else if (ctrl.createTextRange) { var range = ctrl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } } 举例:只能输入时间字符串,如果输入错误,可以修改,字符串中间出错,在触发oninput事件时光标会自动到最后,给修改带来不便 //只能输入时间 (例如12:00) $(document).on("input",".mustArriveTimes",function(){ if(event.shiftKey||event.altKey||event.ctrlKey||event.keyCode==16||event.keyCode==17||event.keyCode==18||(event.shiftKey&&event.keyCode==36)) return; var pos=$(this).getCurPos();//保存原始光标位置 var temp = $(this).val(); $(this).val($(this).val().replace(/[^-+\d]/g,'')); if($(this).val().length > 6){ var afterstr = $(this).val().substr(pos-(temp.length-$(this).val().length),$(this).val().length); var beforestr = $(this).val().substr(0,pos-1); $(this).val(beforestr + afterstr); } pos=pos-(temp.length-$(this).val().length);//当前光标位置 setCaretPosition($(this)[0],pos);//设置光标 /*if($(this).val().length == 2){ $(this).val($(this).val()+':'); }else if($(this).val().length > 7){ */ //} });