我实现了一个像这样自动添加空格的函数:

+33 6 XX XX XX XX

或者
06 XX XX XX XX

这是脚本:
$('#num').keypress(function(){
    $this = $(this);
    //remove whitespaces to calculate the length of the string
    $val = $this.val().replace(/\s+/g, '');
    //if it's the case '+33 6 XX XX XX XX
    if ($val.toLowerCase().indexOf("+") >= 0 | $val == "")
    {
     if($val.length == 3){
            $this.val($this.val() + " ");
        }else if($val.length == 4){
            $this.val($this.val() + " ");
        }else if ($val.length >= 5 && ($val.length)%2 == 0){
            $this.val($this.val() + " ");
        }
    }else{
         if (($val.length)%2 == 0){
            $this.val($this.val() + " ");
        }
    }

});

它在 chrome 上完美运行,但在 Firefox 上我无法退格输入.. 有什么想法吗?

这是一个 jsfiddle 来说明:

https://jsfiddle.net/jd1mwp3p/

最佳答案

这里有两件事需要考虑。

第一个是不同的浏览器处理 keypress、keyup、keydown 的方式不同。特别是当涉及不可打印的字符时,例如退格键,一些浏览器会触发 keypress 事件,而有些则不会。 Firefox 有,而 Chrome 没有。

现在,如果您查看代码,则不会考虑退格。实际上,如果没有 + 号并且值为偶数,则您所做的是添加一个空格:

else{
         if (($val.length)%2 == 0){
            $this.val($this.val() + " ");
        }
    }

如果值为 3 个 4 或 5 个字符长且有 + 或值为空,则再次添加一个空格:
if ($val.toLowerCase().indexOf("+") >= 0 | $val == "")
    {
     if($val.length == 3){
            $this.val($this.val() + " ");
        }else if($val.length == 4){
            $this.val($this.val() + " ");
        }else if ($val.length >= 5 && ($val.length)%2 == 0){
            $this.val($this.val() + " ");
        }
    }

所以。 Chrome 会忽略您的按键事件,只是删除字符,firefox 会调用您的事件,而您不处理退格。

关于javascript - 在按键 jquery 功能上,退格键不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38485471/

10-11 14:42