2011-05-25 38 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