全角を半角カタカナに変えたい



0   名前: ジューダオ : 2005/09/01 20:45
全角を半角カタカナに変えたく下記のソースを書きました。
入力時には変換されるようになりましたが、エンターを押し、
再度入力で以前入力した値が消えてしまいます。
方法は無いのでしょうか?
宜しくお願いします。

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">
<TITLE>全角数字を半角数字に変える方法</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--

function Fulltohalf()
{
han = "0123456789.,-+ABCDEFGHIJKLMNOPQRSTUVWXYZアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァァィィゥゥェェォォッッャャュュョョ";
zen = "0123456789.,−+ABCDEFJHIJKLMNOPQRSTUVWXYZアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁァぃィぅゥぇェぉォっッゃャゅュょョ";

han2 = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ";
zen2 = "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽガギグゲゴザジズゼゾダジヅデドバビブベボパピプペポヴ";
str = ""
var strVal = frmTest.txtBox.value;

for (i=0; i<strVal.length; i++){
c = strVal.charAt(i);
n = zen.indexOf(c,0);
if (n >= 0){
c = han.charAt(n);
}
n = zen2.indexOf(c,0);
if (n >= 0){
n = n * 2;
c = han2.charAt(n);
c += han2.charAt(n + 1);
}
if ()
str += c;
}
frmTest.txtBox.value = str;
}
//-->
</SCRIPT>
</HEAD>
<BODY>

<FORM NAME="frmTest">
<INPUT TYPE="text" NAME="txtBox" SIZE="40" maxlength = "5" onKeyDown="Fulltohalf()"><BR>
</FORM>

</BODY>
</HTML>

1   名前: ジューダオ : 2005/09/01 20:45
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">
<TITLE>全角数字を半角数字に変える方法</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--

function Fulltohalf()
{
han = "0123456789.,-+ABCDEFGHIJKLMNOPQRSTUVWXYZアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァァィィゥゥェェォォッッャャュュョョ";
zen = "0123456789.,−+ABCDEFJHIJKLMNOPQRSTUVWXYZアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁァぃィぅゥぇェぉォっッゃャゅュょョ";

han2 = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ";
zen2 = "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽガギグゲゴザジズゼゾダジヅデドバビブベボパピプペポヴ";
str = ""
var strVal = frmTest.txtBox.value;

for (i=0; i<strVal.length; i++){

c = strVal.charAt(i);
n = zen.indexOf(c,0);
if (n >= 0){
c = han.charAt(n);
}
n = zen2.indexOf(c,0);
if (n >= 0){
n = n * 2;
c = han2.charAt(n);
c += han2.charAt(n + 1);
}
str += c;
}
frmTest.txtBox.value = str;
}

//-->
</SCRIPT>
すみません。ソースを間違えました
</HEAD>
<BODY>

<FORM NAME="frmTest">
<INPUT TYPE="text" NAME="txtBox" SIZE="40" maxlength = "5" onKeyDown="Fulltohalf()"><BR>
</FORM>

</BODY>
</HTML>

2   名前: m035 : 2005/09/01 20:45  [URL
文字が半角の場合飛ばすようになっているので、
スクリプトに問題はないです。
ただ、テキストボックスにフォーカスを当てたまま、エンターを
押すと、勝手にsubmitした状態になることがあるようなので、
<FORM NAME="frmTest" onSubmit="return false">
にしてみてはどうでしょう。
また、この中でsubmitしたいときは
<input type="button" value="submit" onclick="document.frmTest.submit()">
を使えば出来たような気もします。

3   名前: ジューダオ : 2005/09/01 20:45
ところがこのロジックでは何度も入力すると入力した文字が消えてしまう現象が出るのです。
その解決方法が無いかと思いまして送りました。

4   名前: m035 : 2005/09/01 20:45  [URL
すこし、改造しました。直るかどうかは知りません。
おそらく消える原因は入力→変換して最後の出力の瞬間。
最後にtextboxに変換後の文字が入りますが、これが途中のときにまた、
変換が行われると文字が消えるのではないでしょうか。
(例「あいう」と入力。変換され、出力されるとき、「アイ」しか出力されていないときに
「えお」と入力。すると関数には「アイえお」が渡され、「う」が無くなる)
なので変数swが1のときのみ変換するようにして、変換中swを0にしておき、出力後swを1にして
同時、もしくは出力中に変換しないようにしました。文字を打っていて、
「あれ、変換されないぞ?」と思ったら、エンターを押してみると良いかも知れません。
<!----------微妙に改造-------------//>
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">
<TITLE>全角数字を半角数字に変える方法</TITLE>
<!--↓はLANGUAGEではなく、TYPEを使いましょう//-->
<SCRIPT TYPE="text/javascript">
<!--
var sw=1;
function Fulltohalf()
{
if(sw==1){
sw=0;
han = "0123456789.,-+ABCDEFGHIJKLMNOPQRSTUVWXYZアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァァィィゥゥェェォォッッャャュュョョ";
zen = "0123456789.,−+ABCDEFJHIJKLMNOPQRSTUVWXYZアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁァぃィぅゥぇェぉォっッゃャゅュょョ";

han2 = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ";
zen2 = "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽガギグゲゴザジズゼゾダジヅデドバビブベボパピプペポヴ";
str = ""
var strVal = document.frmTest.txtBox.value;//documentが抜けてました。IE以外ではエラーの可能性ありです。直しました。

for (i=0; i<strVal.length; i++){

c = strVal.charAt(i);
n = zen.indexOf(c,0);
if (n >= 0){
c = han.charAt(n);
}
n = zen2.indexOf(c,0);
if (n >= 0){
n = n * 2;
c = han2.charAt(n);
c += han2.charAt(n + 1);
}
str += c;
}
document.frmTest.txtBox.value = str;
sw=1;
}
}
//-->
</SCRIPT>
</HEAD>
<BODY>

<FORM NAME="frmTest" onsubmit="return false">
<INPUT TYPE="text" NAME="txtBox" SIZE="40" maxlength = "5" onKeyDown="Fulltohalf()"><BR>
</FORM>

</BODY>
</HTML>

5   名前: ジューダオ : 2005/09/01 20:45
すごーい!
使えます。m035様ありがとうございます。
後はmaxlengthを取り、その長さしかぶち込まないようにすれば使えると思います。
このままだとMaxLengthを超えて入力後、削除で削除できない感覚になる問題が起きました。
ありがとうございました。
でも初心者の私、分からないのですがなぜDocumentが必要なのか・・・?
研究したいと思います。
ありがとうございました

6   名前: m035 : 2005/09/01 20:45  [URL
>なぜDocumentが必要なのか・・・?
var strVal = frmTest.txtBox.value;
のようにするとエラーになるブラウザがあるからです。
IEではこのように記述してもエラーにならないようですが、しっかりと書いたほうがいいと思われます。

一覧へ戻る