人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

前の質問の続きです。
サイトの概要は前の質問を参照して下さい。
以下のようなスクリプト、
function createChildOptions2A(frmObj)
{
// 親ジャンルを変数pObjに格納
var pObj2A=frmObj.elements["2productA"].options;
var pObj2AValue=frmObj.elements["2productA"].value;
中略
};
};
}

<SELECT name="productA" id="productA" onchange="createChildOptionsA(this.form);createChildOptions2A(this.form)">というタグから呼びだそうでしているのですが、
var pObj2A=frmObj.elements["2productA"].options;
の部分で、
未定義または NULL 参照のプロパティ 'options' は取得できません
となってしまいます。
createChildOptionsA(this.form)は問題なく実行できました。
変数の定義やスコープの問題だとは思うのですが、JavaScript初心者で急な用のためここで質問させていただきます。心得のある方のご回答お待ちしております。


●質問者: しゅうすけ
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●400ポイント ベストアンサー

想像ですけど、2セットの SELECT って、form が分かれてるんじゃないでしょうか?
こんなふうに。

<form> <!-- ひとつ目 -->
 <SELECT name="productA" id="productA" onchange="createChildOptionsA(this.form);createChildOptions2A(this.form)">
 <option>...</option>
 </SELECT>
 ...
</form>

<form> <!-- ふたつ目 -->
 <SELECT name="product2A" id="product2A" onchange="createChildOptions2A(this.form)">
 <option>...</option>
 </SELECT>
 ...
</form>

createChildOptions2A() の引数に渡している this.form は、その SELECT が含まれている FORM なので、product2A の SELECT を選択したときには、正しく動きますけど、productA のときには product2A が含まれていない FORM が渡されるので、「見つからない」と出るのでしょう。

productA から createChildOptions2A を呼ぶときには、this.form ではなく、product2A が含まれる FORM を探して渡してあげれば良いと思います。
例えば、ふたつ目の FORM に id 属性を付けて、document.getElementById で渡してあげる、とか。

<form> <!-- ひとつ目 -->
 <SELECT name="productA" id="productA"
 onchange="...; createChildOptions2A(document.getElementById('second_form'))">

...

<form id="second_form"> <!-- ふたつ目 -->
 <SELECT name="product2A" id="product2A" onchange="createChildOptions2A(this.form)">

肝心の部分が見切れちゃうので、色々と省略してますが、createChildOptions2A() の引数に着目してください。

    onchange="...; createChildOptions2A(document.getElementById('second_form'))"


<form id="second_form" ...>



# 想像が外れてたら、ごめんなさい。


しゅうすけさんのコメント
ありがとうございました。JavaScriptの基礎的な知識不足で、勉強になりました。

2 ● pogpi
●100ポイント

onChangeで二つ関数を呼ぶのではなくて、その二つの関数を呼ぶ関数を作って、それをonChangeで呼んでやるというのはどうですか。


しゅうすけさんのコメント
ご回答ありがとうございます。確かにコードが簡潔になるので選択肢の一つだと思います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ