テキストエリアの入力バイトをカウントする
テキストエリアのonChangeイベントは、フォーカスを移動したときしか動作しないので、リアルタイムにカウントするように作ってみました。本当はイベントをKeyUpかKeyDownに限定したほうがよいかも。
文字数単純にlengthを使うと2byte文字が"1"とカウントされてしまうので、これを"2"と数えることができるとほほのものを使いました。ですが、この関数はencodeURLして%uが先頭につくものを単純に"2"として数えているため、半角カナ文字も"2"と計上されます。実用としてはもう少し調整が必要そうです。
<html> <head> <script src="http://prototype.conio.net/dist/prototype-1.3.1.js"></script> <script language="javascript"> <!-- function jstrlen(str) { var len = 0; str = escape(str); for (var i = 0; i < str.length; i++, len++) { if (str.charAt(i) == "%") { if (str.charAt(++i) == "u") { i += 3; len++; } i++; } } return len; } //--> </script> </head> <body onLoad="new Form.Element.Observer($('area'), 3, function(){ $('c').innerHTML = jstrlen($('area').value); })"> <div id="c">0</div> <textarea id="area"></textarea> </body> </html>