金額入力スクリプト 2008-04-23版
バグ修正、ファンクション名変更等。使い方は以前といっしょ。一応クロスブラウザ対応なんだけどOperaだけ最初のフォーカス時のカーソルの動きが他のブラウザと異なっているのでどう解決させるか悩み中。Operaは未対応にしようかな。
//need prototype.js ver1.6 and more. // subscription Event.observeByClassName = function(a,b,c) { var elements = document.getElementsByClassName(a); for (var i=0; i<elements.length; i++) { Event.observe(elements[i], b, c); } } // // utilities var Currency = { onFlag : function() { CurrencyFlag = true; }, offFlag : function() { CurrencyFlag = false; }, setComma : function(num) { var value = new String(num).replace(/,/g, ''); while (value != (value = value.replace(/^(-?\d+)(\d{3})/, '$1,$2'))); return value; }, trimExceptNumeric : function(num) { var nocomma = num.replace(/[^0-9]/g,''); (nocomma.length == 0) ? nocomma = '0' : nocomma; return nocomma; }, setCurrencyStyleByClassName : function(className) { var elements = document.getElementsByClassName(className); for (var i=0; i<elements.length; i++) { elements[i].style.textAlign = 'right'; } } }; function checkIsZenkaku(e) { var f; if (e.length == 0) { e = 0; return false; } for (var i = 0; i < e.length; ++i) { var c = e.charCodeAt(i); if (!f && (c < 256 || (c >= 0xff61 && c <= 0xff9f))) { f = false; } else { f = true; break; } } if (f) return true; else return false; } // var CurrencyFlag = false; function handleNumericAndCommaKey(evt) { var e = evt ? evt : event; var value = e.target.value; if (value == '') { e.target.value = '0'; return false; } if (checkIsZenkaku(value)) { window.alert('全角文字が入力されています。半角文字入力で金額を入れてください。'); } value = Currency.trimExceptNumeric(e.target.value); if (value.length > 1) { if (CurrencyFlag) { value = value.replace(/^0*/, ''); } if (value.length == 0) { value = '0'; } e.target.value = value; } value = Currency.setComma(value); e.target.value = value; } function initInputCurrency() { Currency.setCurrencyStyleByClassName('input_currency'); Event.observeByClassName('input_currency', 'focus', Currency.offFlag); Event.observeByClassName('input_currency', 'keydown', Currency.onFlag); Event.observeByClassName('input_currency', 'keyup', handleNumericAndCommaKey); } Event.observe(window, 'load', initInputCurrency);