JavaScript をまだはじめたばかりで、質問として
しょうもないのかも知れませんが、よろしく
おねがいします。

フレームで分けた、別のページにあるグローバル変数の値を参照したり、function を呼び出したりという
芸当は可能でしょうか???

A 回答 (1件)

はじめまして、naru さん。



可能ですよ。

・別ページにある input タグのvalue
・別ページにある scriptタグ内のグローバル var 変数

など。
また、関数などの呼出も可能ですよ。

◆サンプル #実際の書き方で説明を。

 2フレーム構成のページを作成(#1)し、フレーム2(frame2.htm)側から、
 フレーム1(frame1.htm)内をアクセスする

 アクセス例:
  A.parent.sub1.form1.value1.value でframe1のinput name=value1を参照
  B.parent.sub1.dialog() でframe1のjavascript 定義関数を呼び出し
    また、var ret = parent.sub1.dialog(); とすれば、dialog()がreturnした
    値を受けることが可能。
    ※このサンプルでは、frame1内のjavascriptグローバルvar変数値を取得
  C.parent.sub1.form1.jump.click() でframe1のinput name=jumpのクリック実行

=== 以下上記アクセス例用のコード

++(フレームページ)++

<frameset rows="50,*" frameborder="0" border="0" framespacing="0">
<frame name="sub1" src="frame1.htm" >
<frame name="sub2" src="frame2.htm">
</frameset>

++(frame1.htm)++

<SCRIPT LANGUAGE="JavaScript">
<!--
var g_val = 0;

function dialog() {
alert("g_val="+g_val);
return g_val;
}
function plus_proc() {
g_val++;
}
// -->
</SCRIPT>

<form name="form1">
<input type="hidden" name="value1" value="aaaaa">
//g_val の値を変更するボタンを配置
<input type="button" name="plus" value="plus" onClick="plus_proc()">
<input type="button" name="jump" value="jump" onClick="なにか処理でも">
</form>

============================

以上、参考までに。
がんばってみて下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
IEで確認しましたところ、確かに変数の参照、
parent.sub1.dialog(); は可能でした。
しかし・・・ネスケでやると parent.sub1.dialog();
の方がだめなようでした。
でも参考になりました。
わざわざスクリプトまで書いて示していただき、
感謝いたします。

お礼日時:2002/02/01 16:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QJavaScriptのグローバル変数

JavaScriptのグローバル変数
次のプログラムで、(1)は p.obj1 = 32 と表示されるのに、
(2)はエラーになります。pはグローバル変数的にアクセスできる
のに、なぜobj1がアクセスできないのかが分かりません。
詳しい方の解説をお願いします。

// test.js
main();
function main()
{
F2(new F1(32, 100));
alert("p.obj1 = "+ p.obj1); // (1)
alert("obj1 = "+ obj1); // (2)
}

function F1(obj1, obj2) {
this.obj1= obj1;
this.obj2= obj2;
}

function F2(p)
{
this.p =p;
return this.p;
}

function alert(message) {
WScript.Echo(message)
}

Aベストアンサー

原則として、JavaScript の関数は全てコンストラクタです(逆はホスト依存)。関数として振る舞うか、コンストラクタとして振る舞うかは、単純に new 演算子の有無で決まります。

・new がなくカッコ (..) があれば関数として call します。

・new があればコンストラクタになります。このとき、まずコンストラクタの prototype にセットされたオブジェクトをプロトタイプとする新規オブジェクトを生成します。次に、その新規オブジェクトを this 値としてコンストラクタに引数を渡します。最後に、コンストラクタの戻り値がオブジェクトならそれを、オブジェクト以外なら新規オブジェクトを返します。

最後の文はややこしいですが、要はコンストラクタが新規オブジェクト以外を返しうる、ということです。いろいろ実験して下さい。なお、関数として呼び出す場合は func() のように (..) で引数リストを渡さねばなりませんが、コンストラクタとして呼び出す場合は new Constr のように (..) がなくても構いません。

以上を踏まえて No.0 を見ます。なお、説明のためオブジェクト o を導入します。

・new F1(32, 100) は、まず o = new F1 のように F1.prototype をプロトタイプとするオブジェクト o を生成し、次に F1.call(o, 32, 100) のように o を this 値として F1 を呼び出します。したがって、o.obj1、o.obj2 が定義され、かつ、F1 の戻り値が undefined なので o をそのまま返します。

・F2(o) は関数として呼び出されます。この場合、F2 内の this 値はグローバルオブジェクト(WSH なら名前なし)ですから、this.p はいわゆるグローバル変数 p となります。これは o にセットされます。F2 の戻り値は this.p すなわち o ですが、call 元で再利用はしていません。

ゆえに、グローバル変数 p が参照する o のプロパティ obj1 にはアクセス可能です。しかし、グローバル変数 obj1 の定義は、どこにもありません。

原則として、JavaScript の関数は全てコンストラクタです(逆はホスト依存)。関数として振る舞うか、コンストラクタとして振る舞うかは、単純に new 演算子の有無で決まります。

・new がなくカッコ (..) があれば関数として call します。

・new があればコンストラクタになります。このとき、まずコンストラクタの prototype にセットされたオブジェクトをプロトタイプとする新規オブジェクトを生成します。次に、その新規オブジェクトを this 値としてコンストラクタに引数を渡します。最後に、コンストラク...続きを読む

Qフレーム内 ( 子HTML ) からフレーム外 ( 親HTML ) のコンボボックスをJavaScriptで操作する方法は?

下記のようなHTML(抜粋)のフレーム内(子)から、フレームの外側(親)のコンボボックスの値を変更(現在は「起」が選択されていますが、例えば、これを「承」に変更)したいのですが、JavaScriptをどのように記述すればよいでしょうか?

Top.Hoge ( または、Parent.Hoge ) の後の書き方がわかりません。
(手持ちの書籍は一通り調べてみたのですが、探し方が悪いのか・・・?)

ご存知の方、コメントを頂けると助かります。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja-JP">
<head>
<meta http-equiv="Content-Type" Content="text/html; charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="JavaScript">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>題名</title>

........(略)........

<form name="form2">

// ↓以下、コンボボックス ( ドロップダウンリストボックス? )
<select name="Hoge" onchange="FunctionName(Args.......(略).........)">
<option value="0" selected>起
<option value="1 " >

<option value="2 " >

<option value="3 ">

</select>

</form>

<tr><td colspan="3" align="center">
<iframe width="1200" height="800 "src="/........(Path)......../Hoge.html"></iframe>
</td></tr>

下記のようなHTML(抜粋)のフレーム内(子)から、フレームの外側(親)のコンボボックスの値を変更(現在は「起」が選択されていますが、例えば、これを「承」に変更)したいのですが、JavaScriptをどのように記述すればよいでしょうか?

Top.Hoge ( または、Parent.Hoge ) の後の書き方がわかりません。
(手持ちの書籍は一通り調べてみたのですが、探し方が悪いのか・・・?)

ご存知の方、コメントを頂けると助かります。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="j...続きを読む

Aベストアンサー

ちょっとしたサンプルを作りました。如何でしょうか。

Test.html
'************************************************
<form name="form2">
<select name="Hoge">
<option value="0" selected>起
<option value="1">承
<option value="2">転
<option value="3">結
</select>
</form>
<iframe src="Hoge.htm"></iframe>
'************************************************

Hoge.html
'************************************************
<script language="javascript">
<!--
function setCombo(obj)
{
parent.form2.Hoge.value = obj.value;
}
//-->
</script>
<input type="radio" name="ttt" value="0" onclick="setCombo(this)">起
<input type="radio" name="ttt" value="1" onclick="setCombo(this)">承
<input type="radio" name="ttt" value="2" onclick="setCombo(this)">転
<input type="radio" name="ttt" value="3" onclick="setCombo(this)">結
'************************************************

ちょっとしたサンプルを作りました。如何でしょうか。

Test.html
'************************************************
<form name="form2">
<select name="Hoge">
<option value="0" selected>起
<option value="1">承
<option value="2">転
<option value="3">結
</select>
</form>
<iframe src="Hoge.htm"></iframe>
'************************************************

Hoge.html
'************************************************
<script language="javascript">
<!--
function setCo...続きを読む

QJavascriptのFunctionの構文について

function定義で"a=function() {...}();"と書ある場合の、"}();"の意味が分かりません。
どなたか、この構文の意味をご存知であれば教えてください。
例)
counter = function() {
var count;
return {init: function() {count =0;},count:{count++;}};
}();
↑この部分です。
"function () {......};"の構文は私も良く使用するので理解しているつもりです。
初歩的な問題かも知れませんが宜しくお願いします。

Aベストアンサー

>>counter=func1();
>>counter=func1;
>この2つの構文を使い分けをする場面は、どんな場合なのか分かりますか?

上は関数func1を実行した結果(戻り値)をcounterに格納する。
下は関数func1の別名を与えている。(関数そのものを代入している。)
といった感じ。
意味が全然違うから使い分ける場面も全然違う。

質問文の用法はスタティックなクラスを作る場合によく使用される。
一般的な形でわかりやすく書くと以下のような形。

var func = function(){
//オブジェクトリテラルを作成
var Obj = {};
//スタティックフィールドを作成
Obj.field = "スタティックフィールド"
//スタティックメソッドを作成
Obj.Method = function(){
alert("メソッドが実行されました")
}
return Obj;
}();

最後に()をつけることによってこの無名関数が実行される。
したがって変数funcに代入されるのは無名関数の戻り値Obj。
つまり、
スタティックフィールドfieldとスタティックメソッドMethodをメンバに持つクラスfuncとして使用することができる。

質問文はこれをもっと省略した形で書かれており、
counter.initとすれば内部変数countを初期化(0)し、
counter.countとすれば、内部変数countに1を足した値を返すという
スタティックなクラスを作成しているということ。

>>counter=func1();
>>counter=func1;
>この2つの構文を使い分けをする場面は、どんな場合なのか分かりますか?

上は関数func1を実行した結果(戻り値)をcounterに格納する。
下は関数func1の別名を与えている。(関数そのものを代入している。)
といった感じ。
意味が全然違うから使い分ける場面も全然違う。

質問文の用法はスタティックなクラスを作る場合によく使用される。
一般的な形でわかりやすく書くと以下のような形。

var func = function(){
//オブジェクトリテラルを作成
var Obj...続きを読む

Qfunctionから別のfunctionを実行したい

よろしくお願いします

今JavaScriptで
function a(){
処理A
}
function b(){
処理B
}
function c(){
処理C
処理Aをして終わり
}
と言うことをしたいのですが

function a と同じコードをcに書くのが大変なので
function cからaを呼び出して実行することができないかと考えています

検索も色々してみたのですが
これと言った答えがなかったので質問しました
よろしくお願いします。

Aベストアンサー

他の箇所から、function a()をコールするときと同様に、function c()内でfunction a()をコールすることができます。

function c()
{
処理C
a();
}

Qfunctionの値を別のfunction へ

set_hidukeで取得した「true」を
hiduke_chkにもっていく方法を教えていただけないでしょうか。

<SCRIPT language=JavaScript>
function set_hiduke(){
var hiduke_input = true
}
function hiduke_chk(){
if(hiduke_input==true)
alert("日付をいじった?")
}
</SCRIPT>

<FORM NAME=main ACTION="★" METHOD="POST" onSubmit="return hiduke_chk()">

<INPUT TYPE="TEXT" NAME="年月日" SIZE="12" onBlur="set_hiduke();">
<INPUT TYPE="SUBMIT" NAME="Submit" VALUE="送信"></form>

Aベストアンサー

関数の中で var 宣言した変数は、その関数の中だけでしか使えません。
ですので、

<SCRIPT language=JavaScript>
var hiduke_input = false;
function set_hiduke() {
  hiduke_input = true;
}
function hiduke_chk() {
  if (hiduke_input)
    alert("日付をいじった?")
}
</SCRIPT>

のように、宣言を外に出せばOKです。


人気Q&Aランキング

おすすめ情報