JavaScriptでVBのAddHandlerに相当する方法はあるか

このQ&Aのポイント
  • JavaScriptでVBのAddHandlerのようなことを行う方法はないでしょうか?一つの関数が呼ばれた際に、別の関数が呼ばれるように定義しておきたいと思っております。
  • 具体的には、VBの例を挙げると、メッセージ1が呼ばれる際に、メッセージ2を呼ぶように定義しています。これをJavaScriptで実現する方法を探しています。
  • もしJavaScriptで同様の機能を実現する方法があれば、教えていただけると助かります。
回答を見る
  • ベストアンサー

JavaScriptで、VBのAddHandler

JavaScriptで、VBのAddHandlerのようなことを行う方法はないでしょうか? やりたいこととしましては、 一つの関数が呼ばれた際に、別の関数が呼ばれるように定義しておきたいと思っております。 簡単に、VBの例をあげるとすると下記のようなことです。 これをJavaScriptでやる方法を探しています。(jQueryでも構いません) ご存じでしたら、ご回答をお願い致します。 -------------------------------------- private sub Msg1()    MsgBox("1") End sub private sub Msg2()    MsgBox("2") End sub 'メッセージ1が呼ばれる際に、Msg2を呼ぶように定義 AddHandler Msg1, Addressof Msg2 ----------------------------------------

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

  • ベストアンサー
回答No.1

Msg1を上書きして、Msg2を呼び出すようにしてみてください。 function Msg1(){ alert('1'); } function Msg2(){ alert('2'); } Msg1=Msg2; /*以降、Msg1()とするとMsg2の内容が呼び出される。旧Msg1は消滅。*/ または Msg1を他の変数に退避させ、 旧Msg1とMsg2を呼び出す新しい関数を作って、それをMsg1に代入。 var Msg1_tmp=Msg1; Msg1=function(){ Msg1_tmp(); Msg2(); };

triplane26
質問者

お礼

回答ありがとうございます。 このように記述することができるのですね。 VBに慣れてしまっていて、今いちJavaScriptの記述に慣れていませんが、頑張って勉強したいと思います。

関連するQ&A

  • VB6でClickイベントを一時的に削除したい

    お世話になります VB6で二つのコンボックス内でお互いのリストを編集する処理を作りたいのですが、 イベントを止めないと、編集時に相手のコンボックスにClickイベントが発生して無限ループになってしまいます。 そこでRemoveHandler、AddHandlerで一時的にイベントを停止させたいのですが、 今度は「メソッドまたはデータメンバが見つかりません。」のエラーが出てしまいます。 ※Me.を付けても同じ結果でした どのように記述したらClickイベントを止められますか? Private Sub Combo1_Click() RemoveHandler Combo2.Click, AddressOf Combo2_Click ここでCombo2の編集 AddHandler Combo2.Click, AddressOf Combo2_Click End Sub Private Sub Combo2_Click() RemoveHandler Combo1.Click, AddressOf Combo1_Click ここでCombo1の編集 AddHandler Combo1.Click, AddressOf Combo1_Click End Sub

  • VB2008でデリゲートの代わりにラムダ式が使えるというので、試してみ

    VB2008でデリゲートの代わりにラムダ式が使えるというので、試してみたのですが、うまくいきません。 試したコードは下記です。WindowsFormアプリで、Form1にButton1とLabel1を貼りつけております。 Button1を押すとLabel1に"はじめました"と表示し、2秒待ってから"おわりました"と表示するつもりです。 デリゲートを使った(2)は意図した動作をしますが、ラムダ式を使った(1)はLabel1に何も表示しません。 このようなことはできないのでしょうか? Public Class Form1 Private Delegate Sub longTaskDelegate() Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = "" Dim dlg As New longTaskDelegate(AddressOf LongTask) dlg.BeginInvoke(AddressOf longTaskCallback, dlg) End Sub Private Sub longTaskCallback(ByVal ar As IAsyncResult) Dim dlg As longTaskDelegate = DirectCast(ar.AsyncState, longTaskDelegate) dlg.EndInvoke(ar) End Sub Private Delegate Sub displayMessageDelegate(ByVal msg As String) Private Sub DisplayMessage(ByVal msg As String) If Label1.InvokeRequired Then Label1.Invoke(Function() Label1.Text = msg) ' --- (1) 'Label1.Invoke(New displayMessageDelegate(AddressOf Me.DisplayMessage), msg) ' --- (2) Else Label1.Text = msg End If End Sub Private Sub LongTask() DisplayMessage("はじめました") System.Threading.Thread.Sleep(2000) DisplayMessage("おわりました") End Sub End Class

  • REPLACE関数が使えません

    ACCESS2000を使っているのですが、REPLACE関数が使えなくて困っています。 Private Sub 置換_Click()   MSG = Replace("ABC", "A", "B")   MsgBox MSG End Sub こういう単純なもので試してもうまくいきません。 「プロシージャの呼び出し、または引数が不正です」 とのエラーが出てしまいます。 どんな原因が考えられますか?

  • VB.NETのデリゲートについて

    VB.NETのデリゲートについて質問です。 以下のプログラムなのですが、 デリゲート型をインスタンス化しているところで、コンストラクタにパラメータを渡していますが、 そのコンストラクタはどこに定義されているのでしょうか。 (AddressOf t1.Ohayou)というパラメータが渡されていますが、このパラメータを受け取っているコンストラクタがどれなのかが分かりません。 ご教示よろしくお願いいたします。 Delegate Sub Myprint(ByVal s As String) Module Module1 Sub Main() Dim t1 As Test1 = New Test1() Dim t2 As TEst2 = New Test2() Dim d As Myprint = New Myprint(AddressOf t1.Ohayou) d.Invoke("VB太郎") d = New Myprint(AddressOf t2.Konbanwa) d.Invoke("VB太郎") End Sub End Module Class Test1 Sub Ohayou(ByVal s As String) Console.WriteLine("おはようございます。{0}です。", s) End Sub End Class Class Test2 Sub Konbanwa(ByVal s As String) Console.WriteLine("こんばんわ。{0}です。", s) End Sub End Class

  • [Q:VBA] 現在のオブジェクトの参照(JavaScriptのthisキーワードに相当するもの)

    こんにちは。 Excel VBAで現在のオブジェクトの参照をすることはできますでしょうか?(JavaScriptのthisキーワードに相当するものはあるのでしょうか?) 下記のようなことをしたいのですが(コード自体に意味はありません。検証用です)。 よろしくお願い致します。 -- Private Sub CommandButton1_Click() キャプション = CommandButton1.Caption MsgBox(キャプション) End Sub Private Sub CommandButton2_Click() キャプション = CommandButton2.Caption MsgBox(キャプション) End Sub ・・・×数十個 ↓↓↓ Private Sub CommandButton1_Click() funcCaption End Sub Private Sub CommandButton2_Click() funcCaption End Sub ・・・×数十個 Sub funcCaption() キャプション = this.Caption MsgBox(キャプション) End Sub

  • javascriptライブラリについて

    知り合いから、javascriptのライブラリjQueryって結局何? と質問されました。 jQueryがライブラリと言う言葉は知っているようなのですが、 「子ノードの追加等の命令が、jQueryの関数で定義されていて、jQueryで定義された関数を呼び出すことで、いつもより短い命令で子ノードの追加ができる、関数とかが集まったもの。」 と説明したのですが、いまいちのようでした。 もう少し、ライブラリについていい説明ができないかと方法を探しております。 ライブラリについて、良い説明方法がありましたら、 ご教授おねがいします。 知り合いは、javascriptの基礎は出来るレベルです。(for とかif。getelement類)

  • JavaScriptとVBScriptに関して

    こんにちは。質問です! JavaScriptの確認ダイアログに「はい」「いいえ」「キャンセル」を出す関数がないので、 execScript()を使って、VBScriptのMsgBoxで出力することにしました。 以下、簡単なソースです。 function msgBox() {   var msg1 = "次のページへ移ります。";   var msg2 = "よろしいですか?";   //msg1とmsg2を改行してMsgBoxに出力したい。   var allMsg = msg1 + "vbCrLf" + msg2;     window.execScript("anser = MsgBox('" + allMsg + "',vbYesNoCancel,'確認')","VBScript"); } としているのですが、 VBScriptの改行の"vbCrLf"が文字列扱いとなり、以下のようにそのまま出力されてしまいます。 「次のページへ移ります。vbCrLfよろしいですか?」 ※VBのChr$(13) & Chr$(10)やChr(13) & Chr(10)でも試しましたが同じ結果です。 対処法をご存知の方がおりましたら、ご回答お願い致します。

  • VBでの入力値制限について

    はじめまして。 VBのテキストボックスに値を入力していき、ある桁数になるとメッセージを表示する仕組みを作りたいと考えています。 例えばVBで用意したテキストボックスにキーボードで123と入力しキーボードの4を押した直後に「桁数は3桁までです。」というメッセージを表示したいのですがいい方法を教えていただけないでしょうか? 自分で以下のように作ってみたのですがこれだとキーボードで123と入力し次に4を入力した時にテキストボックスに4が表示されてからエラーが出ます。そうではなく4をテキストボックスに表示させずに4をおしたら以下のメッセージが出るようにしたいのです。 よろしくお願い致します。 Private Sub text1_Change() If Len(text1.Text) > 3 Then MsgBox "桁数は3桁までです。", vbOKOnly + vbInformation, "情報" End If End Sub

  • (VB初心者) VB起動時既に起動されているExcelの情報

    VisualBasic 6.0 初心者です。 既に起動しているExcelの後にVisualBasicを立ち上げた場合、 既に起動しているExcelの情報を得ることが出来るのでしょうか? やりたい事は Excel起動⇒VB起動⇒Excelのセルを選択⇒そのセルに入力されている値 を取得。 VB起動⇒Excel起動の場合はActiveCellの値を取得出来たのですが 既に起動しているExcelの場合 エラー になってしまいます。 お手数ですが、ご教授願います。 Private Sub コマンド1_Click() MsgBox ActiveCell End Sub 'Form_Load時にこれを実行しないと開いたExcelのアクティブセル値を得られない?? Private Sub Form_Load() MsgBox ActiveCell End Sub

  • VB6でWSH(vbs)を起動できる方法を教えてください。

    visual Basic 6でアプリケーションを開発していますが、 このアプリケーション(exe)から、test.vbsを起動したいと考えています。 ====vbのコード===== 'ボタンクリックしたら、test.vbsが実行される Private Sub Command1_Click() shell("test.vbs") End Sub ==== test.vbs ==== MsgBox("test.vbs起動しました。") です。 上記のようにコードを書きましたが、Shell関数で 「実行時エラー'5' プロシージャの呼び出し、または引数が不正です。」 のメッセージが出力されて、vbsが起動できません。 VB6でWSH(vbs)を起動できる方法を教えてください。 環境は以下の通りです。 OS:WIN2000 アプリ:VB6 ブラウザ:IE5.0

専門家に質問してみよう