我编写了一个jQuery“keypress”函数,该函数可以帮助在某些文本输入中输入数字和百分比。
看起来像这样:
$(document).ready(function() {
"use strict";
$('body').on('keypress', '[data-input-restriction="percentage"]', function(event) {
// Allow only backspace and delete
if ( event.which == 46 || event.which == 8 || event.which == 37) {
// continue
} else {
// Ensure that it is a number and stop the keypress
if (event.which < 48 || event.which > 57) {
event.preventDefault();
}
}
// allow no more typing after first %
if(($(this).val().toString().split("%").length - 1) > 0) {
event.preventDefault();
}
});
});
现在,正如您所看到的,该函数仅允许数字(0-9
),点(.
)和百分比符号(%
)。
此外,目前该功能在输入第一个百分比符号后禁止任何输入。我想弄清楚的是如何更改if语句以禁止任何键入AFTER 第一个百分号(以防止用户输入像{{1}这样的值},同时允许用户编辑现有的百分比值。)
有什么想法吗?谢谢!
答案 0 :(得分:1)
您可以检查最后一个字符是%
还是插入位置,以便允许更改。
代码:
if ($(this).val().substr($(this).val().length - 1) == '%' && this.selectionStart >= $(this).val().length) {
event.preventDefault();
}
答案 1 :(得分:1)
您可以找到插入符号位置,然后检查前一个字符是否为%
,然后阻止默认值。
您可以通过 this.selectionStart
请查看下面的代码段
$(document).ready(function() {
"use strict";
$('body').on('keypress', 'input', function(event) {
// allow no more typing after first %
if(this.selectionStart>0 && $(this).val().charAt(this.selectionStart-1)=='%'){
event.preventDefault();
}
// Allow only backspace and delete
if ( event.which == 46 || event.which == 8 || event.which == 37) {
// continue
} else {
// Ensure that it is a number and stop the keypress
if (event.which < 48 || event.which > 57) {
event.preventDefault();
}
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<input type=text />
</body>