onclick複数処理割り当てエラーの解決について

このQ&Aのポイント
  • JavaScript勉強中の初心者が、「next」ボタンをクリックした際に、自動的に閉じられるようにしたいと考えています。
  • 現在の問題は、onclickイベントに複数の関数を設定した場合、一部の関数だけが認識されないことです。
  • 解決策として、aClose()とbClose()を統合する方法を模索しています。具体的な解決策は見つかっていませんが、フォーカスを取得したウィンドウを閉じる方法が考えられます。
回答を見る
  • ベストアンサー

onclick複数処理割り当てエラーの解決について。

いつもお世話になっています。 JavaScript勉強中の初心者です。 HTMLファイル内の文字列Aをクリックすると新規のサブウィンドウ,文字列Bクリックすると別のサブウィンドウが表示される稼働中のシステムがあり,どちらもメインウィンドウに設定されている「next」ボタン(下記setPname('{next}')は前任者により設定済み)をクリックすると自動的に閉じられるようにしたいと思っており,onclickイベントに onClick="setPname('{next}');aClose();bClose();" のように設定しましたが,3番目のbClose();だけが認識しません。 そこでaClose()とbClose()を一つの関数にまとめたいと考えているのですが,ユーザーによりAウィンドウが開いていたり,Bウィンドウが開いていたりまちまちで,具体的な解決策が思い浮かびません。 フォーカスを取得した方のウィンドウを閉じるようにすればよいのでしょうか。。。 関数は下記の通りです↓ ---------------------------------------- //nextがクリックされたらAウィンドウを閉じる function aClose(){ apage.close(); } //nextがクリックされたらBウィンドウを閉じる function bClose(){ bpage.close(); } -------------------------------------- 勉強不足で恐縮なのですが、どなたかご教授頂けないでしょうか。 よろしくお願い致します。

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

  • ベストアンサー
  • HIRSYU
  • ベストアンサー率51% (45/87)
回答No.1

1.ウィンドウのハンドル保存用の変数をグローバルに宣言   (window.openとcloseが同じ関数内ならグローバルである必要はありません) var winA var winB 2.ウィンドウを開く時にウィンドウのハンドルを取得しておきます winA = window.open('./index.html', 'PageA'); winB = window.open('./index.html', 'PageB'); 3.ウィンドウのハンドルがあれば閉じる処理 if(win1){ win1.close(); } if(win2){ win2.close(); } ↑のような書き方で、ウィンドウが存在している場合だけ処理することが可能です

ko_kawauso
質問者

お礼

HIRSYU様 回答ありがとうございます。遅くなりましてすみません。 先程、アドバイス通りプログラムを書き換えたところ思っていた動きを実現することができました!助かりました。 まだまだ勉強不足を痛感しています。 この度はありがとうございました。

関連するQ&A

  • HTML table内文字のonclick抑止

    HTMLの書き方について質問です。 tableのtdにonclick処理を設定し、 さらに、そのtd内の文字列にもonclick処理を設定したいのですが、 文字列をクリックしたときに、同時にtdに設定したonclick処理も実行されてしまいます。 文字列をクリックしたときは、その文字列に設定してある処理だけ実行するようにはできないのでしょうか? 具体的なサンプルは下記の通りで、 text_funcだけを実行させたいのです。 ---------------------- <html> <head> <script language="JavaScript" type="text/javascript"> <!-- function td_func(){ 折りたたまれている文字を表示する処理; } function text_func(){ TD(セル?)の背景色を変える処理; } //--> </script> </head> <body> <table border="1"> <tr> <td style="padding:10px;" onclick="td_func()"> <a href="#" onClick="text_func();return false;">test_td</a> </td> </tr> </table> </body> </html>

    • ベストアンサー
    • HTML
  • 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などに複数関数を割り当てる 書式を教えてください よろしく、お願いします

  • onclickは良くないのですか

    以前、こちらでJAVAScriptはonclickで動作すると 教えて頂き、a タグにそのように記述しています。 ところが、こちらのページでそれは宜しくないと 記述されており、大変衝撃を受けています。 http://d.hatena.ne.jp/HolyGrail/20080515/1210861489 質問1 aタグのonclickはプロの方はほとんど使ってないといいます。 やはり上記なような理由でよく使われてないのでしょうか。 質問2 JQueryを使った次のコードが紹介されていました。 どうもこれがベストな方法なようです。 $(document).ready(function(){ $('#clickevent').click(function(){ alert('clicked'); }); }) alertのところにonloadで実行する関数を置けば いいのかなと思います。 ただ、aタグで指定している<img>の設定がよくわかりません。 aタグのname属性なんかでidを指定するのでしょうか? コードを変えてもいいのかすら検討ができていません。 ご教授のほどをお願いします。

  • onClickに複数の関数を挿入する方法

    初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。 クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。 通常はこのような設定はしないものなのでしょうか? 教えてください。 よろしくお願いします。 <INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。 <INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

  • onclickで2個指定するには?

    例えば、下記のような二つの指定があるします。 function checkd1(){ document.FORM.CHECK1.checked=true } function checkd2(){ document.write("テスト"); } これをonclickで二つとも指定するということはできるのでしょうか? <a href="#" onclick="checkd1()">ボタン</a> <a href="#" onclick="checkd2()">ボタン2</a> を<a href="#" onclick="checkd1(),checkd2()">ボタン</a>としても動いてくれないので、書き直すのではなく、このまま二つを指定したいのですが、どうすればよいのでしょうか?

  • window.open()の複数の使用

    勉強途中で説明も下手で申し訳ございません。 window.open()を使ってリンクバーやメニューバー等、一番上の閉じるボタン以外を非表示にしてサブウィンドウを一つ作る事はできたのですが、 例えば次の行のアイコンや文字などをクリックした際に 別のサブウィンドウを表示されるのをどうしたらよいのかがわかりません。 例えばAのアイコン(又は文字)をクリックしたらa.htmlのサブウィンドウを表示。 次の行のBのアイコン(又は文字)をクリックしたらb.htmlのサブウィンドウを表示させる(いずれもメニューバーやリンクバー等がないもの)をそれぞれに表示させて行くのにはどんな風に区別した記述をすれば良いのでしょうか。

  • サブウィンドウを閉じたときに親ウィンドウのリンク先

    サブウィンドウを閉じたときに親ウィンドウのリンク先 サブウィンドウを閉じたときに親ウィンドウを別URLに 飛ばすにはどうしたらよいですか? ちなみにサブウィンドウはボタンを押したらウィンドウが 閉じるという動きです。 下記のタグで実行できるのですが、 macのIE5.0で動きません。 IE5.0で動くようにしたいのですが・・・・ 下記がタグになります。 ご教授お願いします。 ======サブウインドウタグ======= <script type="text/JavaScript"> function jump_and_close() {  opener.location.href = "別URL";  window.close(); } </script> ======親ウィンドウへのリンク======= <input type="button" value="ボタン" onClick="jump_and_close()">

  • onClickとsubmitの処理順序

    #過去ログをあたりましたが、自分で納得いく解答がなかったので質問します。 フォームのsubmitボタンにonClickでチェッカーなどの関数を与えた場合、 submitでフォーム内容を送信するのと、onClickで指定されている関数の どちらが先に処理されるのでしょうか。 (一応、WindowsのIE、ネスケ共々、onClickの処理の後、submitされるようではあります) function tasikame { (フォームの内容チェック/中略) alert("入力されていない項目があります") } 例えば、このような関数をonClickで起動する場合、フォームに入力されていない 項目があると、警告されます。 この時、submitはどの環境でも起動しないで終わるのでしょうか。 それとも警告が起動した後、フォーム内容はsubmitされてしまうのでしょうか。 #分かりづらければ、補足しますのでどうぞよろしく。

  • 動的にonclickを割当ながら、引数を正しく渡す方法を教えてください。

    皆様のお知恵を拝借させてください。 以下のように、HTML上の<div id="contents">の子になっている <div>のa~cに、動的にonclickの動作を割り当てようとしています。 Javascriptの独自関数abcの引数として、"contents"を渡すことにより、 その子となっている<div>を取得し、 それぞれについて、 「A~Cをクリックすると、それに該当するdivのidを表示する」 という内容になっています。 私の期待としては、  Aをクリックするとa  Bをクリックするとb  Cをクリックするとc を表示させたいのですが、 どれをクリックしてもcが表示されてしまいます。  ---------------------------------------------- <div id="contents"> <div id="a">A</div> <div id="b">B</div> <div id="c">C</div> </div> <script> abc("contents"); function abc(contents){ var elm = document.getElementById(contents); var cn = elm.childNodes; for (var i = 0; i < cn.length; i++) { var oElement = cn[i]; ★ document.getElementById(oElement.id).onclick = function(){def(oElement.id);}; } } function def(id){ alert(id); } </script> ------------------------------------ 要するに、 「動的にonclickの動作を割り当てることができる」 「引数がただしく渡せる」 の2つが満たしたいのですが、上記のような方法しかわからず、 行き詰ってしまっています。 また、説明を簡略化するためにあえてdef()の中身は、 alertのみにしていますが、実際にはもう少し複雑な処理をさせています。

  • onclickイベントで複数関数コール

    下記のようなPHPスクリプトで、onclickイベントで、2つの関数をコールしてるのですが、 何か間違ってますでしょうか。onclickイベントで複数関数コールするときは、カンマで 区切ればよいと書いたあった投稿を見たことがあるのですが。それとも、readcsv()関数の JavaScript内での、PHPの書き方にミスがあるのでしょうか。ご指導よろしくお願いします。 </HEAD> <BODY><script type="text/javascript"> <SCRIPT> function readcsv(){ <?php $list=read_csv(); return $list; ?>;} function setvalue(){ // 変数宣言 var batch_num = list["batch_num"]; ~ // --> </SCRIPT> <INPUT type="button" value="csv参照" onClick="setvalue(), readcsv()"></TD></TR>de

専門家に質問してみよう