• 締切済み

PageLoadの後にJavascript実行したい

お世話になります、よろしくお願いします。 VisualStudio2003でASP.NET(VB)とJavascriptを使ってサイト製作をしています。 ラジオボタンにJavascriptを入れて、項目の表示/非表示を切り替えています。(CSSのdisplay:noneとinlineを切替) これとは別に、ドロップダウンリストが2つ(A,B)あり、Aのドロップダウンリストを変更するとPostBackして、Bの選択肢が変化するといった風に作成しています。 ここで問題が発生し、PostBackが発生すると、項目の表示が初期状態に戻ってしまいました。 あれこれと考えて、Aにも項目の表示/非表示を切り替えるJavascriptを付けたのですが、どうもJavascriptが実行されてからPostBackが発生しているようで、お手上げです。 PostBackが発生しても、表示をそのままにできる方法は無いのでしょうか?よろしくご教授下さい。

みんなの回答

  • Xaval
  • ベストアンサー率58% (61/105)
回答No.7

ポストバック間で状態を保存したいコントロールには、EnableViewStateをTrueにしてください。 サーバコントロールのインスタンスはポストバックを超えて保持されます。 また、PageLoadイベント内でコントロールの初期化を行う場合は、 IsPostBackプロパティを参照し、初期アクセスとポストバックで分けてください。 そうでないと、アクセスのたびに初期化が起きます。 #ページのインスタンスはページアクセスの度にnewされます。 #そのため、変数やコントロールの値はすべて初期化されます。 #ポストバックをまたぐには、SessionとViewStateを使用します。 Atras.NETを使用しないのであれば、 No5のようにRegisterStartupScriptでするのが正解です。 クライアントサイドでの変更もこれで対応します。 なお、最初の回答のようにダミーコントロールの使用は避けてください。 Page.ViewStateを利用してください。 Me.ViewState("aaa") = ・・・・

  • snow765
  • ベストアンサー率26% (8/30)
回答No.6

PageLoadイベントで以下のようにすれば何とかなると思います。 Dim sb_script As String sb_script = "<script Language='JavaScript'>" & vbCrLf & _ "onload=displayChg();" & vbCrLf & _ vbCrLf & _ "</script>" RegisterClientScriptBlock("openwin", sb_script) また、この方法とは全く別に、AドロップダウンとBドロップダウンの連動にAjaxを利用する方法もあるのではないでしょうか?この方法だとリロードが発生しません。

回答No.5

ANo.3様 の通りですが、 「PageLoadの後にJavascript実行したい」ということ、 開発環境がVS2003であれば、 PageクラスのRegisterStartupScriptを使用してJavaScriptを 設定してください。 ブラウザに表示された後、設定したJavaScriptが走るはずです。

回答No.4

ん? んん? すみません ちょっと問題を整理します <条件>  ・ラジオボタンで項目の表示/非表示を設定している  ・ドロップダウンリストがA、Bの2個ある  ・Aを選択後、PostBackが発生させてBの選択肢を変化させている <現象>  ・Aを選択後に項目の表示が初期状態に戻る   すべての項目が非表示になっていた?ってことですよね? <原因>  PostBack発生後ページが再表示されるが  その際、ラジオボタンのJavaScriptが実行されないのでDIVタグに埋め込まれていた初期状態の「style="DISPLAY:none"」が適用されて  すべての項目が非表示になってしまう 現在 上記のように把握しているのですが 間違いないでしょうか? ということであれば… あまり難しく考えずに簡単にいきましょう そのJavaScriptが埋め込まれているaspx側に window.onload = _displayChg; を追加するというのはどうでしょう? ページを表示する際には必ず「_displayChg」を実行させて 項目の表示/非表示を設定し直します ラジオボタンの初期値は設定する必要がありますが… window.onloadはページが表示されるときに発生しますので PostBack発生後にJavaScriptが実行されるようになります

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

> PostBackが発生しても、表示をそのままにできる方法は無いのでしょうか? クラアントスクリプトでスタイルを切り替えたという情報はサーバに送信されない。 ラジオボタンの値は送信されるので、「項目の表示/非表示を切り替え」と同じ事をサーバ側で行えばよい。

回答No.2

ん? なんか勘違いをしていたようです… それでしたら PageLoad時にJavaScriptを再度実行するしか手はないようですね… どのようなJavaScriptを実行されているのか 教えていただけないでしょうか?

hakubi3
質問者

補足

返答が遅れてしまい、申し訳ありません。 Javascriptはaspx側に記述していますが function _displayChg(){ var objAri = document.Form1.rblKBN[0]; var objNasi = document.Form1.rblKBN[1]; if(objAri.checked == true){   hoge.style.display = "inline"; }else if (obNasi.checked == true){   hoge.style.display = "none"; } と記述し、表示/非表示したいコントロールを <DIV id="hoge" style="DISPLAY:none"></DIV> で囲っています。

回答No.1

おそらくPostBack発生後 PageLoadイベントが発生して初期状態に戻っているのでしょう これは仕様ですので仕方がないです 回避方法として手頃な方法は ページ中にダミーコントロールを用意して PageLoadイベント(1回目)でダミーコントロールにフラグをたてるようにする PostBack発生後のPageLoadイベント(2回目以降)では ダミーコントロールにフラグがたっていればExitSubみたいな感じにすればよろしいんではないでしょうか?

hakubi3
質問者

補足

回答ありがとうございます。 Page_Loadイベント内でPostBackか非PostBackなのかの判断は行っているのですが、やはり初期状態に戻っています・・・ PostBack時の処理はドロップダウンリストBだけを初期化して、項目を変更しています。 CSSの表示切替を別の手段で行った方がいいのでしょうか・・・ 現在、仕方無くコントロールのvisibleをfalseにして表示切替を行っていますが、これだとコントロールのある部分に空白が出来てしまい、見栄えが悪いです。

関連するQ&A

  • JavaScriptのポップアップカレンダーについて

    http://allabout.co.jp/internet/javascript/closeup/CU20020529/ 上記サイトにある、JavaScriptを使用したポップアップカレンダを使 っているのですが、ページ内にドロップダウンリストがあるとカレン ダがドロップダウンリストより背面になってしまいます。 (ドロップダウン以外はカレンダが前面に来ます。) カレンダを前面に表示することはできないでしょうか?

  • javascriptだけでドロップダウンリスト

    あるサイトに行ったら、htmlでなく(?)javascriptだけでドロップダウンリストを表示し、リンクさせていました。つまり小さなボタンを押すと、リストが広がって表示されます。これは、ちょっと面倒なテクニックでしょうか?短いスクリプトで使えるなら是非知りたい。長いものならパス・・・。

  • エクセルの条件セルコピーについて

    例えばa3のセルに「ひらがな」と入力されたらb3のセルのドロップダウンリストが『「あ」「か」「さ」「な」』の中から選択できるようにする、 もし、a3のセルに「カタカナ」と入力されたらb3のセルのドロップダウンリストの選択項目が『「ア」「カ」「サ」「ナ」』になる、 もし、a3のセルに「漢字」と入力されたらb3のセルのドロップダウンリストの選択項目が『「月」「土」「日」「火」』になって選べるようになる、 … という風にそのセルの値によって隣のドロップダウンリストの選択項目を変えたい場合はどうすればいいですか?

  • エクセルでのドロップダウンリスト作成について

    エクセルで、3つの項目(A,B,Cとします)をドロップダウンリストから選択する場合、A,B,Cを『名前の定義』で関連付けることはできました。しかし、A,B,Cが同じ文字列の場合、同シート上で同じ名前の定義にできないため、ドロップダウンリストが作成できずにいます。 このようなドロップダウンリストを作成するにはどのようにすれば良いか教えてください。 VBAなどが必要になるのでしょうか? 宜しくお願いします。

  • JavaScriptで折りたたみメニュー

    現在、JavaScriptを利用して折りたたみメニューを作成しました。 2つの項目の下にそれぞれ下層メニューがあり、各項目をクリックするごとに下層メニューが開いたり閉じたりできる状態なのですが、 このどちらかの項目をクリックしたとき、その項目の下層メニューは表示されるが、もう一方の項目の下層メニューは閉じる。というようにするにはどうすればよいでしょうか?(両方の下層メニューが同時に開いている状態が無いように。) よろしくお願いいたします。 【XHTML】 <ul> <li><a href="javascript:exMenu('treeMenu1')">項目1</a> <ul id="treeMenu1" style="display:none"> <li><a href="#">項目1-1</a></li> <li><a href="#">項目1-2</a></li> <li><a href="#">項目1-3</a></li> </ul> </li> <li><a href="javascript:exMenu('treeMenu2')">項目2</a> <ul id="treeMenu2" style="display:none"> <li><a href="#">項目2-1</a></li> <li><a href="#">項目2-2</a></li> <li><a href="#">項目2-3</a></li> </ul> </li> </ul> 【JavaScript】 function exMenu(tName) { tMenu = document.getElementById(tName).style; if (tMenu.display == 'none') tMenu.display = "block"; else tMenu.display = "none"; }

  • javascript 「折りたためるリスト」

    javascript初学者です。 「折りたためるリスト」について、皆さまにお教え頂きたいことがあり投稿しました。 以下のプログラムのような「折りたためるリスト」があると仮定します。「野菜すべて」をクリックすると、「大根、にんじん、レタス」が表示される折りたためるリストです。 通常、折りたたまれたリストを表示した後にリロードすればリストがたたまれてしまいますが、リロードしてもなおリストがたたまれず、「大根、にんじん、レタス」が表示された状態のままにするにはプログラムをどのように改良すればよいでしょうか。 (例:大根とにんじんにチェックを付けた後にリロードすると、リストがたたまれてしまうため何にチェックが付いているのかわからなくなってしまいます。リロードしてもリストが閉じることなく、リストを表示したままにしたい、と一生懸命やっているのですが、私のjavascriptの知識では解決できないのです(涙)。) なにぶんjavascriptが苦手でどうにもお手上げ状態です。 大変お手数をお掛けしますが、どうぞよろしくお願いいたします。 「折りたためるリスト」プログラム ----------------------------------------------------------------------- <html> <body> <input id="all" name="test1" type="checkbox" value="1"><a href="URL" onclick="oritatami('1');return false">野菜すべて</a><br> <div id="1" style="display:none">   <input name="test1" type="checkbox" value="10">大根<br>   <input name="test1" type="checkbox" value="11">にんじん<br>   <input name="test1" type="checkbox" value="11">レタス<br> </div> <script type="text/javascript"> function oritatami(id){ obj=(document.all)?document.all(id):((document.getElementById)?document.getElementById(id):null); if(obj) obj.style.display=(obj.style.display=="none")?"block":"none"; } </script> </body> </html> -----------------------------------------------------------------------

  • Javascriptなどでドロップダウンさせる場合

    例えば階層式のナビゲーションをJavascriptを使ってドロップダウンにする場合などに、マウスオーバーで表示する部分を隠す方法なのですが、 現在わたしはHTMLでは、隠す部分も含めて全て書いておいて、一旦表示してからJavascriptで非表示にしています。 そうするとページ読み込み時に一瞬隠す部分が表示されてから消えます。 はじめからCSSでdisplay:noneなりをすれば表示されませんが、その方法だとSEO上不安です。 隠す部分をHTMLには書かずに、あとからJavascriptで追加する方法も考えましたが、HTMLにメニュー部分が含まれないことになってしまうので、これもSEO上良くないと思います。 上記のほかに、良い方法は無いでしょうか?

  • ASP.NET ドロップダウンリストでの切り分け

    VBもDBもろくに勉強できていない私が、会社の命令により 納期間近のWebアプリをASP.NETを使い作成することになりました。 知識が乏しいため、本やネットとにらめっこし、トライ&エラーを繰り返しながら奮闘しております。 今回は、調べても似たような事例が見つからなかったので質問させていただきます。 検索用のドロップダウンリストが2つあり、ACCESSのマスターより値を参照してます。 Aのドロップダウンリストのマスターは、 ID 項目名 区分 の3項目で成り立っており、表示に項目名 値にIDを設定しております。 Aの選択を行ったときに、区分の値によって Bのドロップダウンリストの選択可否を制御したいのですが、 どのようにすればよろしいでしょうか? 何卒、よろしくお願いいたします。

  • FlashとJavascriptのメニューについて

    現在Javascriptのドロップダウンするサブメニューを作っています。(http://lolipop.jp/のような感じ) そのメニューの下にFlashムービーを配置したいのですが、ドロップダウンしてくるサブメニューはFlashの下に隠れてしまいます。つまり1つ下のレイヤーに表示されてしまいます。 Javascriptをいかしたまま、サブメニューをFlashの上に表示させる方法はありますか?ぜひ教えてください。宜しくお願いします。

  • JavaScriptでドロップダウンリスト

    下記ページのようなものを作りたいです。 ---------- http://www.resonate.co.jp/ 中段「Access」の部分の感じ ---------- これはFlashですが、確かJavaScriptでもできたと記憶しています。 が、その作り方を紹介しているページを探し出すことが出来ませんでした。 このようなドロップダウンリストはJavaScriptで出来ますか?また、出来るとした場合、その方法を紹介しているページがあれば教えてください。