不重复的逗号

时间:2012-05-09 13:52:45

标签: javascript jquery

<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/

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

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

4 个答案:

答案 0 :(得分:4)

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

目前尚不清楚你想要什么,但这会停止多次按下逗号键。从这里开始检测周期(代码190)应该是一小段步骤,而是用它来做任何你想做的事。

$('.dot').keydown(function(e){
    if (e.which == 188) {
        if (this.value.indexOf(',') != -1) {
            e.preventDefault();
            return false;
        }
    }
})​;

答案 1 :(得分: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/

答案 2 :(得分: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, ','));
})​;​

DEMO

答案 3 :(得分:0)

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

var myVal = $(this).val();
myVal[myVal.indexOf(",")] = ".";
myVal.split(",").join("");
$(this).val(myVal);