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/

在此示例中,我将点替换为逗号。如何阻止在当前输入中添加两个逗号?

如果输入中已经是一个逗号,那么下一个应该被删除。

4

4 回答 4

4

这是尝试用正则表达式解决问题的经典案例,现在你有两个问题......

目前尚不清楚您想要什么,但这将停止多次按下逗号键。它应该是从这里检测句点(代码 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

如果我正确理解您想要什么,这是一种方法:

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