在输入类型文本框中获取最多13个数字,但如果用户按下14个数字作为小数,则只允许最多16个数字。
HTML:
<input type="text" maxlength="15" onkeyup="checkCurrency(this)"/>
脚本:
function checkCurrency(ctrl) {
ctrl.setAttribute('maxlength', '16');
var currency = ctrl.value.replace(/[,]+/g, '');
var valid = /^\d{0,13}(\.\d{0,2})?$/.test(currency),
val = currency;
if (valid) {
ctrl = val;
} else {
ctrl.setAttribute('maxlength', '13');
}
};
现在,当第14位是小数(。)时,它可以正常工作,但是请将任意整数放在第14位并查看差异。
答案 0 :(得分:0)
为什么不将数字转换为字符串,检查一段时间的长度和最后一个子字符串,并相应地调整maxlength
function checkCurrency(ctrl) {
var x = ctrl.value.toString();
var size = x.length;
if (x.substring(size-1) == "." && size >= 14) {
ctrl.maxlength = 16;
} else {
ctrl.maxlength = 13;
}
}
答案 1 :(得分:0)
试试这个:
HTML code:
<input type="text" maxlength="13" />
和jQuery:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$("input").keypress(function(e)
{
string = $('input').val();
length = string.length;
if (length == 13){
if (e.which == 46){
$("input").attr('maxlength', 16);
}
}
});
</script>
答案 2 :(得分:0)
你可以做这样的事
<强> HTML 强>
<input type="text" id="inp">
<强> JQuery的强>
$('input').attr('maxLength','13').keyup(
function (){
if(this.value.contains('.'))
$(this).attr('maxLength','16');
else
$(this).attr('maxLength','13');
});
并且不要忘记添加JQuery引用。
修改强>: 编辑代码,因为您不希望文本眨眼。
答案 3 :(得分:0)
试试这个..
HTML
<input id="a" type="text" maxlength="15" />
JS
$('#a').keypress(function (event) {
if ($('#a').val().length < 14) {
if (event.keyCode != '110' && event.charCode != '46') {
$('#a').attr('maxlength', '13');
} else if (event.keyCode == '110' || event.charCode == '46') {
$('#a').attr('maxlength', '16');
}
}
});
答案 4 :(得分:0)
我从不认为字符串比较比正则表达式测试更好(当它是一个数字问题时(绝对是十进制问题))。 我对用户输入问题很有经验,所以我总是喜欢使用正则表达式来完成这种输入行为,因为它的性能总是快速,可靠,更易于维护。
我做了“输入备份”行为以始终支持最后一次有效插入。因此,对于您的确切需求,这是一个完整的示例(我保留了您的正则表达式):fiddle
var varRegex = /^\d{0,13}(\.\d{0,2})?$/;
var varLastValidValue = "";
$(function ()
{
$('#SpecialInput').keyup(function ()
{
if (!varRegex.test($(this).val()))
$(this).val(varLastValidValue);
else
varLastValidValue = $(this).val();
});
});
与其他答案不同,我的优势是只强制使用2个十进制数字(任何位置)。在服务器端,我认为这是必不可少的(我相信这就是你对输入施加限制的原因。你正在反映DataBase中存储数据的格式,对吧!?)。
重要的是请注意,此代码仅适用于1个输入(因为它是)。对于同一页面中的多个输入,一个简单的方法将使用elements属性,或类似的东西来存储“LastValidValue”。
(我知道完美会听'onkeydown'事件,并阻止用户输入。但它会使用更高级的代码,我想让它变得简单)
希望我帮忙!
答案 5 :(得分:0)
HTML
<input type="text" maxlength="13"/>
JS
$('input').keydown(function (event) {
$(this).data('previous', $(this).val());
if ((event.keyCode == 110) || (event.keyCode == 190)) {
$(this).attr('maxlength', 16);
}
});
$('input').keyup(function (event) {
if ( ! /^\d{0,13}(\.\d{0,2})?$/.test($(this).val())) {
$(this).val($(this).data('previous'));
}
});