2011-05-25 71 views
7

我想在文本框的每三位数字上添加逗号。
我正在使用此代码,但它不起作用。 我错在哪里?使用jQuery将逗号每隔三位加上逗号给文本框

$(function() { 
     $.fn.digits = function() { 

      return this.each(function() { 
       $(this).val($(this).val().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); 
      }) 
     } 
     $("#Test").bind("change keyup keydown paste blur", function (e) { 

      $("#Test").digits(); 
     }); 

    }); 

回答

7

请尝试以下:

// "1234567".commafy() returns "1,234,567" 
String.prototype.commafy = function() { 
    return this.replace(/(.)(?=(.{3})+$)/g,"$1,") 
} 
$.fn.digits = function() { 
    return this.each(function() { 
     $(this).val($(this).val().commafy()); 
    }) 
} 

的jsfiddle http://jsfiddle.net/BrUVq/1/

+0

不起作用,我的浏览器被吊死:D! – Shahin 2011-05-25 08:06:39

+0

我刚测试过,工作正常。你使用的是什么浏览器? 看到http://jsfiddle.net/BrUVq/1/ – troynt 2011-05-25 08:13:14

+0

我想在这些事件fromat:更改keyup keydown粘贴模糊 你会编辑你的代码吗? – Shahin 2011-05-25 08:22:30

0

如何使用jQuery Format插件?

http://jsbin.com/uhima5/edit

<input type="text" id="n" value=""/> <a href="#" id="fmt">format</a> 

$("#fmt").bind("click", function() { 

    var nr = $("#n").val(); 
    var n = $.format.number(parseFloat(nr), '#,##0.00#'); 

    $("#n").val(n); 
}); 
+0

如何使用您的代码onchange值的文本框? – Shahin 2011-05-25 08:06:07

+0

这是格式化的,你没有在你的问题中指定你想在输入时被格式化。如果是这种情况,您需要使用Masked Input Plugin。http://www.conetrees.com/2009/03/blog/jquery-masked-input-plugin-increase-usability-for-masked-format-input-字段/ – balexandre 2011-05-25 08:14:20

1

您可能需要使用所谓的 “蒙面文本框”,看看这个jQuery Plugin

+0

是的,它会在您键入时添加逗号。真棒吧? – 2011-05-25 07:51:57

1

尝试沿着这些路线的东西...

演示:下面http://jsfiddle.net/wdm954/8HDem/

(function($) { 
    $.fn.digits = function() { 
     return this.each(function() { 

      $(this).keydown(function() { 
       var str = $(this).val(), cc = 0; 
       for (var i=0; i<str.length; i++) if (str[i] == ',') cc++; 
       if (str.length != 0 && (str.length - cc) % 3 == 0) { 
        $(this).val($(this).val() + ','); 
       } 
      }); 

     }); 
    }; 
})(jQuery); 
0

解决方案需要照顾的光标位置跳到号结束在被编辑时中间,加上照顾逗号删除和退格问题,其中退格或删除删除逗号只是被添加回来

<script type="text/javascript"> 
    $(function() { 
     $("[type='tel']").keydown(function (event) { 
      var position = this.selectionStart; 
      var $this = $(this); 
      var val = $this.val(); 
      if (position == this.selectionEnd && 
       ((event.keyCode == 8 && val.charAt(position - 1) == "," && val.substr(0, position - 1).indexOf(".") == -1) 
       || (event.keyCode == 46 && val.charAt(position) == "," && val.substr(0, position).indexOf(".") == -1))) { 
       event.preventDefault(); 
       if (event.keyCode == 8) { 
        $this.val(val.substr(0, position - 2) + val.substr(position)); 
        position = position - 2; 
       } else { 
        $this.val(val.substr(0, position) + val.substr(position + 2)); 
       } 
       $this.trigger('keyup', { position: position }); 
      } else { 
       this.dispatchEvent(event); 
      } 
     }); 

       $("[type='tel']").keyup(function(event, args) { 
         if (event.which >= 37 && event.which <= 40) { 
           event.preventDefault(); 
         } 

         var position = args ? args.position : this.selectionStart; 
         var $this = $(this); 
         var val = $this.val(); 
         var parts =val.split("."); 
        var valOverDecimalPart = parts[0]; 
         var commaCountBefore = valOverDecimalPart.match(/,/g) ? valOverDecimalPart.match(/,/g).length : 0; 
         var num = valOverDecimalPart.replace(/[^0-9]/g, ''); 
         var result = parts.length == 1 ? num.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") : num.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") +"."+ parts[1].replace(/[^0-9.]/g,""); 
        $this.val(result); 
        var commaCountAfter = $this.val().match(/,/g) ? $this.val().match(/,/g).length : 0; 
         position = position + (commaCountAfter - commaCountBefore); 
         this.setSelectionRange(position, position); 
       }); 
      }); 
    </script> 
+0

嗨,麦塔斯,我对你的行为有点困惑。你似乎已经在Stack Overflow上发布了4次这个答案(以各种形式)......包括2个关于Java的问题,并且与jQuery完全无关。请注意,张贴重复的答案是皱眉。你应该把投票结束的问题看作是重复的,或者修改你对问题本身的回答。显然,你也不应该发布不相关的问题的答案... http://stackoverflow.com/a/32071578,http://stackoverflow.com/a/32071539,http://stackoverflow.com/a/ 32071380,和这里。 – Matt 2015-08-18 21:55:36

+0

@Matt Hi Matt。试图真正有用。我花了大约一个小时的时间寻找这样的机制,而当我找不到它时,我不得不自己修复它,而后又花了4个小时。现在为了节省一些时间给其他人,我已经将它发布在我寻找的地方它本身(最有可能被发现的地方,因为有一半的人看着如何用逗号格式化就必须在编辑领域做这些工作,然后他们需要上面的机制)。我明白他们不回答原来的问题。如果你认为我应该删除这些有用的补充,那么请说出来。谢谢。 – 2015-08-19 08:13:32