• 締切済み

動的にイベントハンドラ生成する際に引数がある関数を作る

お世話になっています、ご質問があります。 以下の場合 --hogeA.html-- <html> <head> <script type="text/javascript" src="./**/hogeB.js"></script> </head> <body onload="javascript:hoge.init()"> <input type="text" name="hogehoge" value=""> </dody> </html> --hogeB.js-- hoge = { init : function(){ var BodyElement = document.getElementsByTagName('INPUT'); BodyElement.onBlur = this.setOnBlurAction; }, setOnBlurAction : function(value){ ****(省略)**** } } 上記の場合に、onBlurイベントハンドラ関数を生成し、 画面上でonBlurイベント時にsetOnBlurActionを実行させる予定です。 引数のある関数の場合、動的にイベントハンドラ関数を生成する際はBodyElement.onBlur = this.setOnBlurAction; では駄目な気が致しますが、どうすれば良いでしょうか。 どなたかご教授願います。

みんなの回答

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

エレメント.ハンドラ = function(){関数名('引数')} とか、 エレメント.ハンドラ = Function('関数名("'+引数+'")'); とか、でしょうか?

Lotus_Nots
質問者

お礼

皆様いろいろな回答ありがとうございました。 引数ありで正常に作成する事ができました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>引数のある関数 この場合、どのようなものを引数として渡そうとしてるのでしょうか? 自分自信に関する物はthis経由で参照できるので、引数渡しする必要は ないとおもいますけど・・・ //hoge.htm <script src="hoge.js"></script> <input type="text" name="hoge1"> <input type="text" name="hoge2"> <input type="text" name="hoge3"> window.onload=function(){hoge.init()} hoge = { init : function(){ var BodyElements = document.getElementsByTagName('INPUT'); for(i in BodyElements){ BodyElement=BodyElements[i]; BodyElement.onblur = this.setOnBlurAction; } }, setOnBlurAction :function(){ alert(this.value); } }

Lotus_Nots
質問者

お礼

皆様いろいろな回答ありがとうございました。 引数ありで正常に作成する事ができました。

Lotus_Nots
質問者

補足

回答ありがとうございます。 実際に試してみていますが、 onBlurイベントハンドラに暗黙的に関数は入っているのを ブックマークレットで確認しましたが、 実際にUI側で操作してみても関数が実行されていないようです。 うーむ。。。困った;

関連する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()の実行 となりました。(これもなぜこうなるのかよくわかりせん) 以上、イベントハンドラに最初から任意に入れられている処理を残しつつ、 さらに処理を加えるにはどうすればよいのかご教示お願いします。

  • INPUTタグ以外からイベントハンドラを起動する方法

    はじめまして。 いろいろ調べたのですが、的確な答えが見つかりませんでしたので、ご教授お願いいたします。 訳あってonchangeイベントをタグの外から起動したいのですが、関数に括弧を付けると「実装されていません」というエラーが出てしまいます。 括弧を付けていない関数はうまく起動します。 どうしても関数に引数を渡してあげたいのですが、どのようにすればよいのでしょうか? 動作環境は IE5.5 windows2000 ASPにてJavaScriptを作成しています。 以下ソースを簡略化して記述しました。 よろしくお願いいたします。 <html> <head> <script TYPE="text/javascript"> <!-- function f_AAA(){ alert("AAA"); } function f_BBB(a_value){ alert(a_value); } --> </script> </head> <body> <form> <input type="text" name="text1" value="1"> <input type="text" name="text2" value="2"> <script TYPE="text/javascript"> <!-- // ↓括弧の付いていない関数は起動します。 document.forms[0].text1.onchange = f_AAA; // ↓括弧の付いている関数は起動しません。 document.forms[0].text2.onchange = f_BBB("OK"); --> </script> </body> </form> </html>

  • Event.observe について教えてください。

    javascript および prototype.js について理解が中途半端なのですが、Event.observe() の 'click' 指定で、関数に引数を渡すにはどうしたらよいでしょうか?そんなことできないのでしょうか? どういうことかといいますと、まず次のようなプログラムは動かすことが出来ました。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <script src="prototype.js" type="text/javascript"></script> </head> <body> test page <form name="form1"> <input type="button" name="exe" value="実行" id="b1" > </form> </body> </html> <script type="text/javascript"> function myfunc(){ return confirm('exe ?'); } Event.observe($('b1'), 'click', myfunc, false); </script> ------------------------------------- なのですが、この myfunc()関数に引数を与えれたらよいな、と思いまして、 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <script src="prototype.js" type="text/javascript"></script> </head> <body> test page <form name="form1"> <input type="button" name="exe" value="実行" id="b1" > </form> </body> </html> <script type="text/javascript"> function myfunc(a){ alert(a); return confirm('exe ?'); } Event.observe($('b1'), 'click', myfunc(3), false); </script> のようにしてみましたが、これは意図通り動かず、何故か画面をロードした時に、myfunc()関数も呼ばれているようです。 何分理解が中途半端なので、わたしがよく分かっていないことがあるのだと思いますが、どなたかご教授していただけたら嬉しいです。よろしくお願い致します。

  • 引数が分かりません。

    JavaScriptの超初心者です。 (1)のmessageと(2)のmessageと(3)の'Hello JavaScript !'との相関関係がよく分かりません。  又、引数そのものの意味もよく分かりません。 どなたか教えて下さい、よろしくお願いします。 <html> <head><title>イベントハンドラーの定義</title>    <SCRIPT> <!-- function showMessage(message){                   (1) window.alert(message);                     (2)                    } //--> </SCRIPT> </head> <body> <center> <hr>イベントハンドラーの定義<hr><br> ボタンをクリックするとダイアログボックスが表示されます。<br><br> <form>   <input type="button" value="ここをクリック"    onclick="showMessage('Hello JavaScript !');">         (3) </form> </center> </body> </html>

  • 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

  • イベントハンドラをタグ外に記述するには

    <input type="submit" value="submit" class="btn" > で記述したボタンにロールオーバーを設定したいのですが、訳あってinput内に書くことができません。 色々と調べて試してみたのですが上手くいかないので、どなたか教えていただけませんか? よろしくお願いします。 私が試した方法は、<head></head>内に <script TYPE="text/javascript"> <!-- startEvent("window","load","Over") function Over(){ startEvent("document.forms[0].elemens[1]","onmouseover","Color"); } function Color(){ document.forms[0].elemens[1].style.backgroundColor = "orange"; } --> </script> 以上を記述するという方法です。

  • イベントハンドラの関数の引数について

    こんにちは。 Object.onmouseoverのイベントハンドラにObject.classNameとeventを引数とする関数(func1)を指定するにはどのような風にしたら良いでしょうか?以下のように 試しましたがいずれも動きません。 function func1(obj,event){・・・} (1)Object.onmouseover=function(){func1(Object.className,event)} //エラー:Object.classNameはNull (2)Object.onmouseover=function(Object.className,event){func1(Object.className,event)} //無反応 (3)Object.onmouseover="func1("+Object.className+",event)"; //onmouseoverでない時にfunc1が呼び出される。 よろしくお願いいたします。

  • 即時関数とイベントハンドラについて

    javascriptは全体を即時関数で囲って、変数の有効範囲を制限したほうが良いということを知りました。しかしスクリプト全体を囲ってしまうと、関数にもアクセスできなくなってしまいます。イベントハンドラで外部から関数を使用したい場合は、全体を囲うべきではないということでしょうか。 もし対処方法がありましたら、教えてくださると助かります。

  • イベントハンドラメソッドに関して教えてください

    お世話になります。イベントハンドラメソッドについて教えてください。 -----JS----- function f() { window.alert("Click"); } ---(1) document.myform.mybtn2 = function(){ ---(2) window.alert("Click"); } -----HTML----- <form id="myform" name="myform"> <input type="button" id="mybtn1" name="mybtn1" value="Click" onclick="f()" /> ---(1) <input type="button" id="mybtn2" name="mybtn2" value="Click" /> ---(2) </form> Q:上記のコードで(1)の場合だと正常にalert画面が出ますが、(2)の場合だと何も起こりません。 FirefoxのJavaScriptコンソールで調べると下記のエラーが表示されます。 documnet.myform has no propaties なぜエラーが発生するのか分からずに困っています。 解決の手がかりでもよいので教えてください。

  • PHPでJavascriptの引数の扱い方

    はじめまして。宜しくお願い致します。 環境:Linux(Redhat 9), apache2, PHP4.3.6 [やりたいこと] 下記↓ソース内容↓より、input=button と input=text が幾つかある。 個々のボタンが押されたら、PHPにて"個々"の内部処理を行う。 内部処理終了後は、個々のテキストにインクリメントした値が画面表示される。 HTML+Javascript にて、カウンター部分は一応完成しています。 ↓ソース内容↓ <html> <head> <script language="JavaScript"> <!-- function ccc(obj0) { cnt = obj0.value; cnt++; obj0.value = cnt; } // --> </script> </head> <body> <form name="ose"> <input type="text" name="view0" readonly size=5 maxlength=3> <input type="button" value="押せ0" onClick="ccc(view0)"><br> <input type="text" name="view1" readonly size=5 maxlength=3> <input type="button" value="押せ1" onClick="ccc(view1)"> </form> </body> </html> コレをPHPに書き換えると、上手くいきません。 ↓PHPに書き換えた場合↓ <script type="text/javascript"> <!-- function ccc($obj0) { cnt = $obj0.value; cnt++; $obj0.value = cnt; } // --> </script> 引数に付いている "$"マークをJavascript側で認識しないのだろう、と考えています。 出来れば、PHPで単体の関数として使用したい為、模索中です。 ※現在は、別の関数の中に上記の『↓HTML+Javascriptの場合↓』を無理矢理入れて使用しています。(別の関数:HTMLをPHPファイルに書き込む) 別の関数内に入れてても問題は無しです。 但、上記のJavascriptを使用しないソース達にも書き込んでしまうので、ちょとやだなーと。 いい方法があったら教えて下さい。

    • ベストアンサー
    • PHP