2016-07-20 13 views
3

動作しません。私はそう自動的に同じように空白を追加する機能を実装:ここキー押下jqueryの機能に、バックスペースが

+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() + " "); 
     } 
    } 

}); 

これは完全にクロームで動作しますが、Firefoxでは入力をバックスペースできません。ここで

は説明するjsfiddleです:

https://jsfiddle.net/jd1mwp3p/

+0

UXの観点から見ると、実際にはChromeではうまくいきません。 1つの例 - 数字を入力すると、2桁の数字を入れ替えたことに気づくでしょう。それらを選択し、正しい方法でそれらを上書きしようとする - 奇妙なことが起こります。 –

+0

ああ、これを試していない...それは間違って何かをして私は奇妙ですか? –

答えて

0

ここで考える2つのものがあります。

最初の1つは、さまざまなブラウザでキー入力、キーアップ、キーダウンを別々に処理することです。特に、バックスペースなどの印刷不可能な文字については、一部のブラウザではキー入力イベントが発生し、一部のイベントでは発生しません。 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() + " "); 
     } 
    } 

So. Chromeはキー入力されたイベントを無視して文字列を削除し、firefoxはイベントを呼び出すため、バックスペースは処理されません。

+0

ありがとうございますが、それは答えではありません! keypresss関数は、バックスペースのような印刷不可能なキーを処理することを許可していません。 –

+0

バックスペースのキーコードは、削除の場合は8と46にする必要があります。私が言及したように、すべてのブラウザがバックスペースでkeypressを呼び出すわけではないので、私はおそらくキーアップを使用するでしょう –

+0

これをそのままにして、キーコードが8の場合はifステートメントを返します。イベントを発生させないブラウザは、 @BaptisteArnaudを返すブラウザは –

1

ブラウザが発砲した場合に備えて、印刷不可能なキー押しイベントをフィルタリングする必要があります。

$('#num').keypress(function(e) { 
    if(e.keyCode == 8) { 
    return true; 
    } 
    $this = $(this); 
    // etc. 
} 
1

.keydownを使用して、バックスペースかどうかを確認する心配する必要はありません:バックスペースのために例えば

、!押されたどのキーでも機能するためです。

関連する問題