我正在过滤输入文本字段中的输入,例如:
我正在动态过滤输入,例如删除非数字字符。
$("#txtlevel").bind('keyup', function(evt)
{
var value = $(this).val();
value = value.replace(/\D/g, ''); /* Remove any non-digit characters */
if ( value.length > 1 )
{
value = value.replace(/^[ 0]/g,''); /* Remove any leading spaces or zeros */
}
$(this).val(value);
}
这在 Firefox 中效果很好,但在 IE 和 Chrome 中,光标每次都会跳到输入字段的末尾。如何防止这种情况或重置光标位置?我见过为文本字段执行此操作的代码,但没有为输入文本字段执行此操作。
最佳答案
当您使用 keyup 并执行正则表达式替换(换句话说,设置值
)时,光标将跳到末尾。如果您的目标是仅允许数字键(加上退格键、删除键),请尝试以下操作:
$("#txtlevel").bind('keydown', function(event) {
// Allow only backspace, delete, left and right arrows, return and tab
if (event.keyCode == 46 ||
event.keyCode == 8 ||
event.keyCode == 37 ||
event.keyCode == 39 ||
event.keyCode == 13 ||
event.keyCode == 9) {
// let it happen
}
else {
// stop the keypress if not a number
if (event.keyCode < 48 || event.keyCode > 57 ) {
event.preventDefault();
}
}
});
要取消粘贴时的非数字事件,请将其绑定(bind)到 paste
事件:
$("#txtlevel").bind('paste', function(e){
var value = $(this).val();
value = value.replace(/\D/g, ''); /* Remove any non-digit characters */
if ( value.length > 1 ) {
value = value.replace(/^[ 0]/g,''); /* Remove any leading spaces or zeros */
}
$(this).val(value);
});
关于jquery - 使用jquery过滤输入文本字段导致光标在IE和Chrome中跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062090/