- PR -

SetFocusについて

投稿者投稿内容
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 2006-11-28 11:09
じゃんぬねっとさん、dotnetmemoさん、ご返答ありがとうございます。

まず、じゃんぬねっとさんのご指摘について、

> どの時点で Script エラーが起きているか検証しましたか?
> たとえば、
> > document.all["XXXXXXX"]
> この時点で、正しいオブジェクトが取得できているかを確認するだけで、
> ぐっと解決に近づきます。
> デバッグの基本は問題の切り分けです。

「スクリプトエラーの内容は信用ならぬ」とセンパイが言っていたのですが、「・・・はNullまたはオブジェクトではありません。」なので、正しいオブジェクトが取得できていないのでは? と予想し、document.all["XXXXXXX"] .focus()としても、同じエラー内容でしたので、予想は確信に変わりました。
(よって、onblurのbが大文字、という以前の問題のようです。)

次に、dotnetmemoさんのサンプルコードですが、getElementByIdとしても同じスクリプトエラーとなってしまいます。。。

以上により、「何らかの理由で」document.〜の方法でオブジェクトが取得できてないのではないか? という疑心暗鬼にとらわれております。

とりあえず、以前Accessさんが指摘くださったように、

1.ロストフォーカス時のエラーチェックもあり(エラーメッセージは出ないし、チェックがかかるのは1回目のロストフォーカス時だけだけど。。。)
2.ボタン押下時にもチェック(@クライアント側)して、この時のエラーではエラーメッセージを出力と同時にエラー項目(テキストボックス)にフォーカス設定

という仕様で押してみようと思います。

一方で、スクリプトでonblurイベントを抑制して、上記1の仕様をカットする方法も継続的に(個人的に)実験していきたいと思います。

大いに勉強になりました。本当にありがとうございます。
今後とも宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-28 12:37
引用:

のすけさんの書き込み (2006-11-28 11:09) より:

「スクリプトエラーの内容は信用ならぬ」とセンパイが言っていたのですが、「・・・はNullまたはオブジェクトではありません。」なので、正しいオブジェクトが取得できていないのでは? と予想し、document.all["XXXXXXX"] .focus()としても、同じエラー内容でしたので、予想は確信に変わりました。


どうも私の頭が悪いせいか、真面目に意味がわかりません。

引用:

「・・・はNullまたはオブジェクトではありません。」


というスクリプト エラーなのであれば、

引用:

document.all["XXXXXXX"] .focus()としても、同じエラー内容


になるのは、当たり前のお話だと思われるのですが、
どのあたりが、"としても" になるのか、ご教示頂けませんでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ださいくろう
常連さん
会議室デビュー日: 2006/10/17
投稿数: 46
お住まい・勤務地: 豊田市
投稿日時: 2006-11-28 13:05
引用:

のすけさんの書き込み (2006-11-28 11:09) より:
じゃんぬねっとさん、dotnetmemoさん、ご返答ありがとうございます。

まず、じゃんぬねっとさんのご指摘について、

> どの時点で Script エラーが起きているか検証しましたか?
> たとえば、
> > document.all["XXXXXXX"]
> この時点で、正しいオブジェクトが取得できているかを確認するだけで、
> ぐっと解決に近づきます。
> デバッグの基本は問題の切り分けです。

「スクリプトエラーの内容は信用ならぬ」とセンパイが言っていたのですが、「・・・はNullまたはオブジェクトではありません。」なので、正しいオブジェクトが取得できていないのでは? と予想し、document.all["XXXXXXX"] .focus()としても、同じエラー内容でしたので、予想は確信に変わりました。
(よって、onblurのbが大文字、という以前の問題のようです。)


意味不明だと思います。
・・・がnullだとしますと、そのオブジェクトのメンバーはどれも呼び出すことはできません。
であるからして、document.all["XXXXXXX"] .focus()としても、同じエラー内容になるのは当然です。
nullが何であるかわからないのでしょうか?(nullが何であるかわかっていれば、この返し方は絶対にありえないと思いますが)。
それくらいわかってて欲しいと言いたいところですが、それは初心者ということであれば大目に見れます。誰でも最初はわからないですからね。
しかし『予想が確信に変わる』の根拠の示し方にまったく根拠がない。ということに気付かないこと自体はまずいと思います。
これは初心者かどうか関係なく、学ぶべき側の人間の礎としていかがなものかと思うのですよ。
これでは間違った知識の宝庫になってしまいます。
すると今回のような事態を招きやすくなるわけです。

言い忘れましたので追記します。

>「スクリプトエラーの内容は信用ならぬ」とセンパイが言っていたのですが、[/quote]

これも間違った知識だと思います。
もしれっきとした根拠があるなら示してみてください。

今思ったのですがこのセンパイが間違った知識を教えている張本人ではないでしょうか・・・
もしそうだったら、ご愁傷様です。

[ メッセージ編集済み 編集者: ださいくろう 編集日時 2006-11-28 13:11 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-11-28 14:16
引用:

ださいくろうさんの書き込み (2006-11-28 13:05) より:
・・・がnullだとしますと、そのオブジェクトのメンバーはどれも呼び出すことはできません。
であるからして、document.all["XXXXXXX"] .focus()としても、同じエラー内容になるのは当然です。
nullが何であるかわからないのでしょうか?(nullが何であるかわかっていれば、この返し方は絶対にありえないと思いますが)。


いや。スレ主(のすけ氏)はNullであるという可能性を捨てているんじゃね?
無論それ自体どうかと思うが。
引用:

「スクリプトエラーの内容は信用ならぬ」とセンパイが言っていたのですが、「・・・はNullまたはオブジェクトではありません。」なので、正しいオブジェクトが取得できていないのでは? と予想し、


って書いてあるからねw
ま。「正しいオブジェクトが取得できていないのでは?」という予想もまったく根拠がないわけだがw

さてさて。仮に「またはオブジェクトではありません」だったとしよう。
それでもonblurは存在しないけどfocusはどのオブジェクトでもできるってことにはならんわな。
このエラーは単に「focusっていうのが存在しない不正なオブジェクト」だと言っているにすぎない。
引用:

予想は確信に変わりました。


ってことで。この根拠のない確信は大間違い。
引用:

(よって、onblurのbが大文字、という以前の問題のようです。)


これも根拠のない結論。
そんなこんなでどんな見方をしても根拠がないのよねw

先輩が100%正しいことを言うとは限らんよ。
少なくとも今回の話で出てくる先輩はかなりレベルが低い迷信家か、知ったかぶりなので絶対に信用しないほうがいい。
つーか。そのセンパイ俺が説教してやりたい。ひどすぎ。

騙されないためにはアドバイスをもらっても自分で調べて自分で納得することが肝要。
もっと自分が納得のいくような勉強をしようぜ。な!
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-11-28 15:36
ぜうす氏の投稿がまた消えちゃってるね。
返信しようとしたのに非常に残念。
未記入
ベテラン
会議室デビュー日: 2003/06/26
投稿数: 76
投稿日時: 2006-11-28 16:33


[ メッセージ編集済み 編集者: 未記入 編集日時 2007-01-19 21:36 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-11-28 17:09
引用:

ぜうすさんの書き込み (2006-11-28 16:33) より:
それと、alert(document.all["xxxxx"]);などをうまく使って、document.all["xxxxx"]がnullだと"予想"するのではなく"確認"すればみんなからわいわい言われないかもね〜。


同意。これについてはじゃんぬねっと氏が指摘している内容そのものですな。
指摘された時にでも素直に確認さえすればわいわい言われなくてもすんだでしょうな。
つーより今回の場合は確認しない上に根拠のない反論をしてきたからわいわい言われるはめになったわけだがw

引用:

「スクリプトエラーの内容は信用ならぬ」と言うセンパイは信用ならぬ
...「スクリプトエラーの内容は信用ならぬ」は真か偽か...トートロジー!


falseだろうね。そんな話聞いたことないし。

引用:

という予断は不要でした?>ぶさいくろうさん。突っ込まないでね!


予断はいらないけどw余談はいいと思うw
突っ込むところはここでいいよね?w

投稿を削除するにチェックを入れるとはお茶目さんですな。
いや俺もやったことあるんだけどw

ちなみにjavascriptを書く位置はわかりやすさからしても<head>が望ましいね。
そんでもって外部ファイルにしとくのが好き。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-11-28 20:29
引用:
のすけさんの書き込み(2006-11-28 11:09)より:

「スクリプトエラーの内容は信用ならぬ」とセンパイが言っていたのですが、


………乗り遅れたので、何が「信用ならぬ」か、考えてみる。

 スクリプト エラーが発生したとき、一応行番号がでますが、無名関数であれば当然行番号は無意味ですし、スクリプトが別のファイルに格納されていれば、そちらの行番号になります。aspx ファイルの場合、HTML に変換されるため、aspx ファイル上の行とはズレます。このあたりのことじゃないですか?

 また、スクリプトを書く位置が関係する場合があります。
コード:
<html>
    <head>
    </head>
    <body>
        <form>
            <script>
                document.all("itemID") これは null
            </script>
            (1) ここより上

            <input id="itemID">

            (2) ここより下
            <script>
                document.all("itemID") これは値がとれる
            </script>
        </form>
    <body>
</html>


 1のように、form のアイテムよりも上に、即時実行されるコードを書いた場合、document.all("itemID") も、document.getElementById("itemID") も、null になります。itemID まで解釈が達していないため、要素が作られていないからです。
 このスクリプトをそのまま、2のように要素よりも下に持っていくと、今度は実行できます。
 このように、「なぜエラーとなるのか」を理解していないと、1の位置に置いていたことだけでエラーとなることが理解できず、「スクリプトのエラーは信用ならなぬ」(エラーなんか無いのにエラーを出す)と、短絡する可能性があります。
 ちなみに、RegisterStartupScript で登録されるのは、form の閉じタグの直前です(だったよね?)。


引用:
なぜでしょうか、スクリプトエラー(javascriptにて実装)となってしまいます。
いずれも、スクリプトエラーとなります。。。なぜでしょうか。
「・・・はNullまたはオブジェクトではありません。」なので、正しいオブジェクトが取得できていないのでは?


なぜ、肝心なところを伏せてしまうのでしょう?

 エラーにしろ例外にしろ、そこで出されるメッセージは、受け取る人に読んでもらって、訂正して欲しいから出すものです。そのようにコーディングするでしょう?自分は読んでもらおうと思って出力するのに、なぜ他の人が読んで欲しいと思ったことは読まないのでしょう?


あ………「スクリプトエラーは、情報量が少なすぎて信用ならん」というのも有りかも。。。

_________________

スキルアップ/キャリアアップ(JOB@IT)