jQuery - 密钥限制 - 百分号后不再有字符

时间:2015-10-08 20:45:32

标签: jquery

我编写了一个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}这样的值},同时允许用户编辑现有的百分比值。)

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以检查最后一个字符是%还是插入位置,以便允许更改。

代码:

if ($(this).val().substr($(this).val().length - 1) == '%' && this.selectionStart >= $(this).val().length) {
    event.preventDefault();
}

演示:http://jsfiddle.net/79fbknwL/

答案 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>