• 締切済み

Javascript の elements の書き方について

ソース自体を書くことはできないんで該当部分を抜粋して。 以下の2つの書き方は、処理の流れによって2番のみが”たまに”(注:必ずではなく、ある工程のみの場合だけ)エラーになります。両方とも同じ入力エリアにフォーカスを当てるものです。 1.document.form[Index].focus(); 2.document.form.elements[Index].focus(); エラーメッセージは、 [ document.form.elementsはNULL又はオブジェクトではありません ] です。 違いってあるんでしょうか? 普通(?)は2の書き方のほうが正しいと思うんですが。。。

みんなの回答

  • you111111
  • ベストアンサー率45% (20/44)
回答No.4

>このエラーの現象の時にはこの名前(ID)として固定はできるものの、補足説明の通り、elementsの数自体が動的のため、どの処理でもこのやり方で、というわけにはいきません。 >単純に !document.form.elements[0]、や document.form.elements[0] == null、!document.forms(0).elements[0] では引っ掛かってくれなくて困ってます。 処理が見えないのでなんともいえないですが・・・ そのようなことでしたら、エラートラップを以下のようにしてみたら? try { document.form.elements[Index].focus(); } catch(e) { //エラー時別処理 }

taukun
質問者

お礼

すいません、回答が遅くなりました。 これだと確かに引っ掛かることは引っ掛かるんですが。。。 ただ、回避策というかエラーにならない方法は最初(質問の1)からなんとかなってるので。。。 エラーになる/ならないの違いを知りたいんですが、どうもみなさんソースの回避案を考えてらっしゃるみたいで。。。 質問と外れてきたのでここら変で。 回答くださったみなさん、ありがとうございました。

  • you111111
  • ベストアンサー率45% (20/44)
回答No.3

>2.document.form.elements[Index].focus(); インデックスで指定している要素がフォーカスできない要素オブジェクトになっている可能性があるのではないでしょうか? document.forms(0).elements["NAME or ID"].focus(); にしてみては?

taukun
質問者

お礼

回答ありがとうございます。 >インデックスで指定している要素がフォーカスできない要素オブジェクトになっている可能性があるのではないでしょうか? 多分、間違いないと思います。が、説明でもありますように (多分?)同一の書き方をしているのに片方だけがOKで片方がNGというのが、どうも解らないというか納得できなくて。。。 >document.forms(0).elements["NAME or ID"].focus(); このエラーの現象の時にはこの名前(ID)として固定はできるものの、補足説明の通り、elementsの数自体が動的のため、どの処理でもこのやり方で、というわけにはいきません。せっかくですが、すいません。 ちなみに、あるオブジェクトが存在するかどうか?って解らないんですかね? 単純に !document.form.elements[0]、や document.form.elements[0] == null、!document.forms(0).elements[0] では引っ掛かってくれなくて困ってます。

  • itomizu
  • ベストアンサー率47% (8/17)
回答No.2

う~む。 私にはちょっと分からないです・・・ 因みに [・・・・・・はNULL又はオブジェクトではありません] というエラーは大抵スペルミスで起こります。 私も過去にしょーもないミスで丸2日かかったことも・・・ document.form[Index].focus()と document.form.elements[Index].focus()の違いは特に無いと思うんですが。 でも、エラーが起こるなら違いあるのかな。

taukun
質問者

お礼

回答ありがとうございます。 [・・・・・・はNULL又はオブジェクトではありません] そうですね。このメッセージからだと、スペルミスがまず最初に上がりますが、さすがにそんな初歩的ミスではありません。 その場合、必ずNGになるのでは? 自分が最初に思ったのは、タイミングの問題だと思ってたんですが。。。 純粋に処理が追いつかない(注:参照)ため、オブジェクトが”まだ存在しない”ということかな?と思ったんですが、どうも違うみたいです。なったりならなかったりと不安定なんですよね。 注:以下はネットで調べたものの抜粋です。何かの参考になればと思い、載せておきます。 非常に大きいページにおいて、document.xxx[...] がページの先頭にあり、<div id="..."> がページの最後にあるときは、 document.xxx[...] が実行されてもまだ <div id="..."> が読み込まれていないので、存在しないと扱われることがある。

  • itomizu
  • ベストアンサー率47% (8/17)
回答No.1

ソースが無いと分かりづらいですね・・・。 ソース自体公開することができないなら同じ動作をするスクリプトとか作っていただけると回答しやすいのですが。 document.forms[0].elements[Index].focus(); を使ってもエラーになりますか?

taukun
質問者

お礼

お礼が遅くなり、すいません。回答ありがとうございます。 同じ動作といってもかなりの量でして。。。サンプルソースもどう作れば再現するのかが分かりづらくて。。。 プログラムではformは本来、名前を付けています(例:<form name="AA">みたいに) わかりやすく、formにしたんですがかえって判りづらくなりまして、すいませんでした。 で、forms[0]に変更して試したんですが同じでした。 あと、質問の意図は2つの書き方が同じ物を指しているのか、それとも多少は、やはり異なるものなのかということと、エラーの回避方法なども教えていただけるとうれしいです。(下記の(1)、(2)みたいな感じで) 補足説明です: Javascriptを使用しているページはJSP内のJavascriptの関数内で、そのページ内で使用しているformは一つのみです。 が、そのページに入ってくる場合、最初にフラグみたいなのでformのelementsの数が違うようになってます。 また、関数の最初に下記(1)と(2)でelementがない場合の処理(今回のエラーの対処法?)を追加しても駄目でした。(始めたばかりなのでプログラム的にあってるか不安ですが。。。) このフラグで複数の処理に分けるようにしてあるんですが、似たよう処理でもOKの場合とNGの場合があるため、分かりません。単純にelementが0個の場合でもOKかと思えば複数個の場合でNGだったりします。  if(!document.AA.elements[0]) { ・・・ (1)   // 別処理  }  else if(document.AA.elements[0] == null) { ・・ (2)   // 別処理  }  else  {    :    :    :   // 問題のエラー   document.AA[Index].focus(); ← OK  //document.AA.elements[Index].focus(); ← たまにNG

関連するQ&A