自動的に次の項目にフォーカス移動するには?

[上に] [前に] [次に]
ばーばぱぱ 1999/06/08(火) 19:08:53
テキストにMAX桁入力されたら次のテキスト(項目)に
フォーカス移動する方法を教えてください。
色々やってみたのですが、全然わかりません。
よろしくお願いします。

yasu [HomePage] 1999/06/08(火) 21:48:30
JavaScriptで、値の長さをlengthで求めて、
focus()で渡したらどうですか?
そういえば、前、<TEXTAREA>でフォーカスを動かすと、フリーズして
しまうことがありました。。。
もう忘れてしまいましたが。

ばーばぱぱ 1999/06/09(水) 14:17:56
テキストがonChange()されたときlengthで現在の文字数と
maxlengthの値を変数で渡して比較する。
一致したら次のテキストにフォーカスを移動する。
という具合にしたいのです。
変数を2つも渡せるのでしょうか。
それができれば、何とかなりそうな気がするのです。
アドバイスお願いします。

Tmb 1999/06/09(水) 15:14:42
関数に複数の引数を渡す場合は,
function func(a,b,c){
という感じでやればできるはずですが?

あと,こういった場合は「一致したとき」ではなく「同じか大きいとき」の
条件にした方が吉です。でかい文字列ペーストされたり,2バイト文字使う
と「一致するとき」がない可能性もあるから。
#可能性がない「はず」でも万一に備えておく方が。

ばーばぱぱ 1999/06/09(水) 17:41:31
次のテキストにフォーカスを移したいのに、
次のテキストをどのように設定すればよいのか分かりません。
どうしたらよいでしょうか。

Tmb 1999/06/09(水) 17:59:53
簡単で汎用性のあるのは「次のテキスト」も関数の引数にして送ることでしょう。

Nobu3 1999/06/10(木) 09:09:50
多くなると大変なので「tx1」などとして、「document.fm1['tx'+i].value」などの指定ができます。
そうすれば「i」を増やせば「tx2」「tx256」などでもOKです。

どのように使うのかわかりませんが、入力した文字を見せたいだけなら「textarea」もいいですよ。

ばーばぱぱ 1999/06/11(金) 16:08:43
<INPUT size="2" type="text" name="NenFrom" maxlength="2" id="tx1" onChange="nextfocus(this.length,this.maxlength)">
として、onChangeしたとき、
以下のスクリプトを起動させてるのですが、なにも起きません。
エラーもでないのでどこがおかしいかわかりません。
おかしいところを教えてください。

<SCRIPT Language="JavaScript">
<!--
function nextfocus(keta,mx){
for(i=0;i<parent.No1.document.all.length;i++){
if(mx<=keta){
alert(mx,keta)
parent.No1.document.FORM1['tx'+i++].focus();
alert("次のフォーカスへ")
}
}
}
// -->
</SCRIPT>

Nobu3 1999/06/11(金) 17:42:21
maxLengthでしょう。

zizz... [HomePage] 1999/06/11(金) 21:06:11
本当にnextfocusという関数が呼び出されたいるか確認しましたか?

onChangeというイベントは、テストに文字が入力されるごとに起きるのではなく、
一度フォーカスを得、次に失った時、Textの内容が変化していれば起きるのだと思います。
Textに文字を入力し続けていて、MaxLengthに達するとonChangeが起きる、ということはないでしょう。
少なくともNetscape 4.6で確認するとそうでした。

使うイベントはonkey***というのが適切ではないでしょうか。
JavaScript 1.2ですが。
あまり確認せずに書いているので、間違っていたらすみません。

nextfocus(this.length,this.maxlength)
と書いていますが、
lengthやmaxlengthというプロパティはあるのでしょうか?
NetscapeのJavaScript 1.3 Referenceを見ると載っていないようですが。

ばーばぱぱ 1999/06/15(火) 10:50:05
onkey***というのはIE4では使えないのでonChangeにしたのですが、
なにかいい方法はないでしょうか。

Tmb 1999/06/15(火) 11:13:22
ここの対応一覧を見るかぎりではonKeyDownやonKeyUpなどは
input type=textに対応してるようですが?
onKeyDown="alert('HogeHoge');"などで確認して,これらのイベントが
どういったタイミングで発生するかを確認しておくといいでしょう。

またmaxLengthなども本当に使えるかどうか気になりますから,呼び出した
関数の最初の行にalert(keta, max);などを付けて,望む数値が得られている
かを確認するとよいでしょう。

ばーばぱぱ 1999/06/15(火) 15:03:59
[[解決]]
結局onkeypress()を使って行うようにしました。

<INPUT size="2" type="text" name="NenFrom" maxlength="2" id="tx1" onkeypress="nextfocus(value.length,maxLength,1)">

このようなテキストにし、スクリプトを以下のようにしたら
できました。

function nextfocus(keta, mx,No){
if(mx<=keta){
i=No+1
parent.No1.document.all['tx'+i].focus();
}
}

皆さんいろいろとありがとうございました。

[上に] [前に] [次に]