• ベストアンサー

javascriptのイベント処理について。

イベント今回の場合は、onloadです。 この場合、 function a(){ 条件(1) 条件(2) 条件(3) } これを、例えば、条件(2)を実行した場合に、 html側で、(2)を実行したと判断するには、無理なのでしょうか。 どう考えても、イベントなので、戻り値を返す場所がないですよね。 何か良い方法はないでしょうか。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.4

こんにちは。 IE10では検証していませんが、 // キャンセルした場合の値を取得して、asf.jpgの背景の変更したいです。 //document.write('<BODY BACKGROUND="asf.jpg">');ここで書いてしまうと、 //当然ながら、 //htmlが全て消えてしまい、背景しか表示されません。 // スタイルを動的に変える document.getElementsByTagName('body')[0].style.backgroundImage = 'url(/images/circle_green.png)'; // スタイルを動的に変える の部分を追加してみてください。 キャンセルで背景画像が切り替わります。

yodogou
質問者

お礼

長い間、有難う御座います。 私は、別な方法で一応解決しましたが、以前とは少し変わってしまったし、 色々と変更してしまったので、みにくいロジックとなってしまいました。 こんな簡単に、出来るのですね、流石にプロは違いますね。 でも私には、それをまだ理解出来ていないので、さらなる勉強して意味を理解したいと思います。 本当にこんな私につきあって頂き感謝の言葉もありません。 有難う御座いました。

その他の回答 (3)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 >最初の背景色は黒です、そして、キャンセルした場合に背景をasf.jpgに変更したいのです。 >現在は、上記の内容なので、常に、asf.jpgが表示される状態です。 >出来るのであれば、宜しくお願いします。 >難しいのであれば、どのあたりを克服すれば、出来るか教えて頂ければ >勉強致します。 すみません、動きが良くつかめないので確認させてください。 このHTMLにアクセスされると 1.モーダル表示で別ウィンドウが表示される(このときメインのウィンドウは何も表示されていない) 2.モーダルウィンドウでパスワードを入力 3.キャンセルの場合は背景を変更する?キャンセルでは無い場合はパスワードをチェックして条件に該当した場合はHTMLを動的に生成する? document.writeで作らなくちゃ駄目でしょうか? document.writeは後から一部だけ変更するという動きには向いていません。 if ( str!=undefind)だったときに全て画像の変更ではなく、全てのHTMLを作成する必要がありそうです。 JavaScriptによるDOMの操作を勉強してみると良いと思います。 また、html内で<center>とか使われていますが、利用できないタグです。 この際、いろいろ勉強してみると良いと思います。

yodogou
質問者

補足

回答有難う御座います 原因は、 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1211093226... IE10で廃止になった事です 実際のhtml ie9以前を使用している人は、今までは、最初は黒背景、そして、キャンセルした場合には、背景が変わるようになってしました。 (現在修正中、IE9以前でも変更されません) 出来ないと言われれば完全に諦めます >document.writeで作らなくちゃ駄目でしょうか? そんな事はないです、どんな方法でも変更出来ればよいです。 どうぞよろしくお願いいたします

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 >そこでもう一つ質問ですが、その値を使用して、まだ処理を続行したいのですが、 >例えば、リターン値が12345と設定した場合、 >if文で聞く場合ねどのようにすれば宜しいでしょうか。 <body onload = "if(a()==='12345') { alert ( '12345だよ' ); } else { alert ( '12345じゃない'); }"> と書けばa()の戻り値が'12345'の場合という条件になりますが普通はインラインで書かないと思います。 <script> function a() { if ( b(1) === '12345' ) { //'12345'の時の処理 document.getElementById('result').innerHTML = '12345だった'; } } function b(val) { // valが1の時は'12345'を返す return val === 1 ? '12345' : ''; } </script> <body onload="a();"> <span id="result"></span> </body> こんなイメージですか? まずonloadでa()が呼ばれます。 次にbを引数1で読み出します。 bは引数が1だったら'12345'を返します。 ''12345'が返って来たので条件が真となりid="result"のhtml内容を書き換えます。 具体的にやりたいことを明記していただければ適切な回答が出来るかと思います。

yodogou
質問者

補足

何度も有難う御座います。 私のしたい事を書きますので、宜しくお願いします。 <script type="text/javascript"> <!-- function settei(){ var i=1; var str=window.returnValue; while(i<=3){ str = showModalDialog("../../x/1pass2.html","document.dia.apu.value","status:no;dialogWidth:388px;dialogHeight:258px;help:no;center:yes;scroll:no;edge:raised;"); if(str==undefined) { alert("ログインはキャンセルされました。"); // キャンセルした場合の値を取得して、asf.jpgの背景の変更したいです。 //document.write('<BODY BACKGROUND="asf.jpg">');ここで書いてしまうと、 //当然ながら、 //htmlが全て消えてしまい、背景しか表示されません。 return true;} else if(str=="") { alert("パスワードが入力されていません。"); } else if(str.length != str.indexOf("1")+6){ alert("パスワードが違います。"); } else { document.writeln("<html><head><title>おめでとうございます。</title>"); document.writeln("<style type='text/css'><!--"); document.writeln("a{color:#462300;text-decoration:none;font-size:18pt;border-width:5px;border-style:outset;background-color:#f0ffff;font-weight:bold;}"); document.writeln("a:hover{color:#ffffff;background-color:#000000;}--></style></head>"); document.writeln("<body topmargin=200 bgcolor=#808080 oncontextmenu='return false;'>"); document.writeln("<center><div style='color:#804000'><big><b>クリアだと思いますよ?<br>"); document.writeln("Enter をクリックしてお入り下さい。<br><br>"); document.writeln("<a href='"+str+"'>&nbsp;&nbsp;Enter&nbsp;&nbsp;</a>"); document.writeln("</b></big></a></div>"); document.write("</center></body></html>"); document.close(); return true;} i++;} } // --> </script> <script type="text/javascript"> <!-- //実際に、何らかの条件を不可して、下の背景に変更したいのです。 //ここで変更する事によって、htmlが全て表示され、背景も変更されます。 document.write(' '); document.write('<BODY BACKGROUND="asf.jpg">'); // --> </script> </head> <!-- **************************************************************************** --> <body onload="settei();" oncontextmenu="return false;" topmargin="25"> テスト </body> まとめますと、 最初の背景色は黒です、そして、キャンセルした場合に背景をasf.jpgに変更したいのです。 現在は、上記の内容なので、常に、asf.jpgが表示される状態です。 出来るのであれば、宜しくお願いします。 難しいのであれば、どのあたりを克服すれば、出来るか教えて頂ければ 勉強致します。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 >html側で、(2)を実行したと判断するには、無理なのでしょうか。 HTML側で判断というのがちょっと読み取れないのですが具体的にどのようにしたいのでしょうか? <script> function a() { return "条件2"; } </script> <body onload="alert(a());"> とすればalert表示で"条件2"が表示されます。 returnで返せていると思いますが違いますか。

yodogou
質問者

補足

回答有難う御座います。 先にごめんなさい、昔の人間なので、メインとサブ的な考え方で書いてしまいました。 hrtmlをメインとすれば、jsファイルの方をサブ的なイメージです。 なので、jsで設定した値をメイン側、htmlで取得出来るかと言う質問でした。 話は元に戻します。 結果、アラートで表示されました、有難う御座います。 そこでもう一つ質問ですが、その値を使用して、まだ処理を続行したいのですが、 例えば、リターン値が12345と設定した場合、 if文で聞く場合ねどのようにすれば宜しいでしょうか。 質問内容が不備な部分は、お許し下さい。

関連するQ&A

  • イベントハンドラに処理を追加するには?

    例えばbodyタグのonloadイベントハンドラに JavaScriptを使って処理を追加するにはどうすればよいのでしょうか? 例) ・rei.htm <html>  <script language="JavaScript" type="text/javascript">  function hoge(){   alert("hogeです");  }  function foo(){   alert("fooです");  }  </script>  <body onload="hoge();">  </body>  <script language="JavaScript" type="text/javascript">  document.body.onload += foo();  </script> <html> ※前提条件として、変更可能な箇所はscriptタグ内のみとなります。 「こんなんでいけないかな?」と思って上記のようにやってみたのですがうまくいきませんでした。 (結果はfoo()のみ実行され、hoge()は実行されませんでした。 alertでbody.onloadの中身を確認すると『function anonymous{hoge();}undefined』と表示されるので、なぜfoo()が実行されてhoge()が実行されないのかよくわかりませんが‥) また試しに document.body.onload += foo(); これを以下のように変更してみました。 document.body.onload = foo(); この時は、 ・foo()の実行  ↓ ・javascriptエラー  ↓ ・hoge()の実行 となりました。(これもなぜこうなるのかよくわかりせん) 以上、イベントハンドラに最初から任意に入れられている処理を残しつつ、 さらに処理を加えるにはどうすればよいのかご教示お願いします。

  • onloadイベント発火条件

    window.onload <body onload="function(){}"> <img src="hoge.jpg" onload="function(){}"> <script src="hoge" onload="funct" でも <div>や<p>ではonloadイベントは無いですよね? どういう場合にonloadイベントは発火するんでしょうか? window , body ,その他srcがあるdom でしょうか? ブラウザ依存もあるでしょうが、仕様的なものはどうなってますでしょうか?

  • アンカークリックのイベントを取得するには??

    <a href="#..." ..> のようなアンカーによる場所の移動だけのタグがあります。 これをクリックしたときに処理を行いたいです。 ただ、多量のタグに対して処理を割り当てたいので、 onClick イベントをaタグにつける方法ではない方法がないかと探しています。 例えば、<body onload="kansuu();"> のようにすればページのロード時に kansuu() を実行してくれます。 が、これではアンカーによる場所移動だけの場合にはページをリロードしないので、kansuu()は呼び出されません。 この <body onload="kansuu();"> のように、一箇所に記載するだけで、 アンカークリック時に実行されるような方法を探しています。 もし分かりましたら教えてください。 なお、クリックした際に、クリック前までのアンカーを得る方法があれば、それも教えてください。 お願いします。

  • JavaScriptのonLoadイベントが、発生したり発生しなかったりする。

    ■環境  ・Mac OS X(バージョン10.3.4)  ・Internet Explorer for Mac(バージョン5.2.3) ■詳細  ・HTMLが読み込まれたときにJavaScriptのhogehoge関数を実行させたいため   HTMLの<BODY>タグを下記のように記述している。    <BODY "onLoad=hogehoge()">  ・当該HTMLを読み込んだとき、あるときはhogehoge関数が実行されるが   あるときは実行されない。   →onLoadイベントが発生していないよう。  ・上記現象に再現性なし。  ・他ブラウザでは、当該HTMLのonLoadイベントは必ず発生する。   確認したブラウザは下記の組み合わせ。    ・Mac OS 9(9.2.4) + Internet Explorer 5(5.1.7)    ・Mac OS 9(9.2.4) + Netscape 4.7    ・WindowsXP + IE6.0(SP2)    ・WindowsXP + Netscape 4.77 ■質問  ・上記現象は、Internet Explorer for Mac(バージョン5.2.3)の   既知の障害でしょうか。  ・回避方法(onLoadイベントを必ず発生させる方法)はありますでしょうか。

  • JavaScriptを最後に実行するには?

    JavaScriptでリンクをランダムに表示するようにしたところ、 少し表示が遅く感じるようになったため、 最後にJavaScriptを実行するようにonloadイベントを使って [外部(JavaScript)ファイル] <!-- window.onload = function onload(){ var random = Math.floor(Math.random() * 3); if(random == 0) document.write('<a href="URL1">サイト名1</a>'); else if(random == 1) document.write('<a href="URL2">サイト名2</a>'); else if(random == 2) document.write('<a href="URL3">サイト名3</a>'); }; //--> [HTMLファイル内] <script type="text/javascript" src="./フォルダ名/ファイル名.js"></script> のように書いて試しましたが、真っ白なページにこのスクリプトの内容だけが表示されてしまいます。 "window.onload = function onload{"と、最後の"};"の部分を追加するまでは普通に動いていました。 また、ページ内に、別の外部ファイルも含めて同じようなものを複数組み込みたいと思っています。 この方法でなんとか表示したいのですが、 別の方法も含め、情報をいただきたいです。 わかりにくいところがあれば補足します。 よろしくお願いします。

  • firefoxとjavascriptとeventと。

    firefoxで、javascript内からeventを渡す時についての質問です。 制作環境はdreamweaver 8です。 dreamweaverで、ボタンのロールオーバー時に画像を変化させる時に自動的にMM_swapImage()というfunctionが作られますが、 ボタンのロールオーバー時に、もう一つ、吹き出しの出るfunctionを実行したいので、このようにしました。 function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){ document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2]; } var chkName=MM_swapImage.arguments[0]; if(chkName == 'Image4') showTooltip(event,'リンクの内容1'); if(chkName == 'Image5') showTooltip(event,'リンクの内容2'); if(chkName == 'Image6') showTooltip(event,'リンクの内容3'); if(chkName == 'Image7') showTooltip(event,'リンクの内容4'); } showTooltip()では、event.clientX等を取得して、表示に反映させます。 これまでの経過は、 ・safariでは正常に表示される。 ・単純にhtmlの「onmouseover=showTooltip(event,'リンクの内容1');」では、firefoxでも正常に表示される。 原因を色々調べたところ、 ・「chkName」は取得できていて、if文も問題ない。 ・eventを数字等に変えるとshowTooltip自体は一応実行される。 といった状況です。 おそらくfirefoxでは、eventをjavascriptから取得するにはなにか別の方法があるのでは?と思い、調べてみたのですが、 window.event document.event と表記してみるくらいしか分かりませんでした。 (両方とも試しましたが、変化無しです) もし何か分かる方がいらっしゃいましたらご教示頂けると幸いです。

  • JavaScriptのイベントの付加で悩んでいます

    すいません、分からないので教えてください。IEの場合です。 var Test = function() {}; Test.prototype = {   a_method: function() {     var self = this;     for (var i=1; i<=10; i++) {       $('nantoka' + i).attachEvent('onclick', function(event) { self.b_method(i); });     }   },   b_method: function(i) {     alert(i);   } }; 例えば上のようなコードがあり、bodyの中には<img id="nantoka1" />のようなimgタグがnantoka1からnantoka10まであるとします。 この状態でnantoka1~nantoka10をクリックすると、それぞれに対応した画像の番号(1~10)を表示したいのですが、上に示したコードだと、どれをクリックしても番号が10になってしまいます。 イベントの設定が上手くいってないのは自分でも分かるのですが、具体的にどう書けばいいのかわかりません。アドバイスお願いします。 _(._.)_

  • .NET非同期イベント処理法について

    VS2010 Express VC++にてWindows Applicationを作成しております。 Form1のイベント(今回の場合はドラッグ&ドロップ)でスタートし、実行中の処理に対して、別のイベント(ボタンクリック等)によって処理内容を中途変更したいのですが、方法が分かりません。 具体的方法をご教示いただくか、又は参照先をお教えいただけないでしょうか。 宜しお願い致します。

  • イベントハンドラを使わずに実行するには?

    googleのように、ページが読み込まれたらフォームにフォーカスを 移すということをやりたいのですが、onLoadのようなイベントを 使わずに行うことは出来ますでしょうか? 掲示板でこの機能を使いたいと思っています。しかし、全てのページに フォームがあるわけではないので、<body onLoad="~">で実現すると フォームがない時にエラーが発生してしまいます。 document.write( "hoehoe" ); が直書きで実行されるなら同じようにできるのでは? と思って <script> <!-- document.form.comment.focus(); // --> </script> とやってみましたができませんでした。 onLoadを使わない方法、もしくは<body>以外でonLoadを使う方法が ありましたら是非教えてください。

  • javascriptでonclickに複数関数を割

    javascriptでonclickに複数関数を割り当てる場合 HTML内であれば、 <button ... onClick="a1();a2();a3();"> でいけると思いますが javascriptにて function a1() { } function a2() { } window.onload = "a1;a2;" のような記述は駄目でした 一つであれば window.onload = a1; でOKですが javascriptでonclickなどに複数関数を割り当てる 書式を教えてください よろしく、お願いします