金額入力スクリプト 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);