2012-04-17 9 views
1

私は数値データのみであることを検証する必要があるテキストボックス(価格)があります。また、私は先行する数字の零を許可することはできません(01など)。だから、replaceメソッドを正規表現で使用しました。置き換える文字の場合、これを使用した:jquery replace関数がIEで奇妙に動作する

$("#txtPrice").keyup(function(){ 
    var text=$(this).val(); 
    $(this).val(text.replace(/[^\d\s\.]/,"")); 
}); 

前のゼロを置き換えるために、私はそれは、Firefoxで正常に動作しますが、IEで、それは奇妙な振る舞い

$("#txtPrice").keyup(function(){ 
    var text=$(this).val(); 
    $(this).val(text.replace(/^0+/, '')); 
}); 

を使用しました。

数字の前に新しい数字を追加すると、数値の末尾に新しい数字が追加されます。例えば、「56」を「156」に編集すると、「561」を形成する最後に数字1が追加されます。任意の数字が正面に配置されようとすると、それは実際にテキストフィールドの最後に追加されます。どのようにこの行動を解決することができますか?

+0

これは、正規表現の置き換えではなく、他の行に問題がある可能性が高くなります。 「警告(テキスト);」を入力するとどうなりますか?それらの2行の間に? – pms1969

+0

私は、特定のインスタンスにバインドされたkeyup関数を1つだけ持つのが理想的だと思います。あなたが探している行動を得るための解決策ではないかもしれないが、それは何が起こっているのかを簡単に把握するだろう。 – veeTrain

+0

こんにちはiijb;私の答えがあなたのための実用的な解決策だったら、それを答えとして受け入れるか、それがあなたの状況に合わない理由を私たちに知らせてください。ありがとう – veeTrain

答えて

0

私はあなたの入力の冒頭に1を置いていて、IEが最後にそれを叩いているとは思っていませんが、実際にはIEがカーソルを入力。矢印/ホームキー操作をキャプチャして、キーアップをトリガし、2つの正規表現を実行し、テキストを置き換えます。

おそらく何が必要なのは、検出されたキーが何であるかを評価し、実際の文字に一致するものがあれば何かをすることだけです。

何かlike thisがあなたの状況に対処していますか?

$("#txtPrice").keyup(function(event) { 
    // avoid triggering on control characters; FF ignores but IE will execute and possibly confuse 
    if (event.which > 40) { 
     var text = $(this).val(); 
     $(this).val(text.replace(/^0+/, '')); 
     $(this).val(text.replace(/[^\d\s\.]/,"")); 
    } 
}); 

おそらくevent.which > 40にはいくつかの例外をしなければならないだろうと私はあなたが、彼らは単にキーを押したところ、ユーザーのカーソルが滞在できるようになるか全くわからないんだけど、私は、これは十分な解決策になるかもしれないと思いますあなたのために。

:正規表現を1つに組み合わせました。更新されたjsfiddleを参照してください。

$(this).val(text.replace(/(^0+|[^\d\s\.])/, "")); 

編集:あなたは、できるだけカーソル「周りのジャンプ」を持っているしたい場合は、すでにそのテキストが一致していることを確認したとき、あなたは、必要に応じて、不正なテキストを置き換えることができます。 Here is a demonstration

if ($(this).val().match(/(^0+|[^\d\s\.])/)) { 
    $(this).val(text.replace(/(^0+|[^\d\s\.])/, "")); 
} 

また、私がフィドルで行ったように、正規表現を変数に外挿することもできます。

+0

こんにちは、それは私の問題を解決しました。しかし、挿入後、カーソルが後ろに移動します。 – iijb

+0

すばらしい@iijb;おそらく、これを元の問題の答えとして受け入れてから、別のオプションを検討した後で新しい問題チケットを開いてください。 [ここにはjsfiddle](http://jsfiddle.net/tU7vh/5/)があります。カーソルが何か「違法」を行った場合にのみ移動します。 – veeTrain

関連する問題