1
<input type="text" class="dot"> <br />
<input type="text" class="dot"> <br />
<input type="text" class="dot"> <br />

$('.dot').keydown(function(){
        $(this).val($(this).val().toString().replace(/\./g, ','));
})

http://jsfiddle.net/ZtkBW/

この例では、ドットをコンマに置き換えます。現在の入力に 2 つのカンマが追加されないようにするにはどうすればよいですか?

入力に既に 1 つのカンマがある場合、次は削除する必要があります。

4

4 に答える 4

4

これは、正規表現を使用して問題を解決しようとする典型的なケースであり、2 つの問題が発生しています...

何が必要かは明確ではありませんが、これによりコンマキーの複数回の押下が停止します。ここから、ピリオド (コード 190) を検出し、代わりに必要なことを行うための短いステップである必要があります。

$('.dot').keydown(function(e){
    if (e.which == 188) {
        if (this.value.indexOf(',') != -1) {
            e.preventDefault();
            return false;
        }
    }
})​;
于 2012-05-09T14:03:08.103 に答える
2

keypressイベントの代わりにイベントを使用しkeydownます (keydownキーの繰り返しによってトリガーされないため)。

.および文字を探し、テキストに既にコンマがある場合は、,戻ることでイベントを停止します。false

イベントは停止可能なため、値が変更される前に発生するため、ピリオドをカンマに置き換えるタイムアウトを使用する必要があります。

$('.dot').keypress(function(e){
    var txt = $(this).val();
    if (e.which == 46) {
        if (txt.indexOf(',') != -1) {
            return false;
        } else {
            var t = $(this);
            window.setTimeout(function(){
                t.val(t.val().replace('.', ','));
            }, 0);
        }
    } else if (e.which == 44) {
      return txt.indexOf(',') == -1;
    }
});

デモ: http://jsfiddle.net/eAkUc/1/

于 2012-05-09T14:14:09.297 に答える
1
$('.dot').keypress(function(e){
     if( ($(this).val().indexOf(',') != -1 || $(this).val().indexOf('.') != -1) && 
         (e.charCode==','.charCodeAt(0) || e.charCode=='.'.charCodeAt(0)) )
         e.preventDefault();
     else
         $(this).val($(this).val().toString().replace(/\./g, ','));
})​;​

デモ

于 2012-05-09T14:17:27.510 に答える
0

あなたが何を望んでいるかを正しく理解している場合、これを行う1つの方法を次に示します。

var myVal = $(this).val();
myVal[myVal.indexOf(",")] = ".";
myVal.split(",").join("");
$(this).val(myVal);
于 2012-05-09T13:55:56.170 に答える