前の質問の続きです。

サイトの概要は前の質問を参照して下さい。
以下のようなスクリプト、
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初心者で急な用のためここで質問させていただきます。心得のある方のご回答お待ちしております。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/04/20 12:25:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント400pt

想像ですけど、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" ...>



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

id:tyusuke88

ありがとうございました。JavaScriptの基礎的な知識不足で、勉強になりました。

2014/04/20 12:26:24

その他の回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント400pt

想像ですけど、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" ...>



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

id:tyusuke88

ありがとうございました。JavaScriptの基礎的な知識不足で、勉強になりました。

2014/04/20 12:26:24
id:pogpi No.2

回答回数428ベストアンサー獲得回数59

ポイント100pt

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

id:tyusuke88

ご回答ありがとうございます。確かにコードが簡潔になるので選択肢の一つだと思います。

2014/04/20 12:27:17

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません