• 締切済み

firefoxでfunction(e){}の e を省略するには?

<html> <body> <input type="text" onkeydown="test()"> <script> function test(){ var e=getEvent()||window.event; o=e.target||e.srcElement; o.style.backgroundColor='#f00'; alert(e.keyCode); } function getEvent(){ var ob, c = arguments.callee; while(c = c.caller) if(ob = c.arguments[0]) return ob; } なんとなく取得できているようなのですが、 バグがありそうで、ご意見を! </script> </body></html>

noname#84373
noname#84373

みんなの回答

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

設問のコードは検証してませんが、 私は http://p2b.jp/index.php?UID=1152131691 こちらのコードを流用したもの(*)をよく使います。 ブラウザを意識せずに常にwindow.eventが使えるので重宝します。 * コード中で利用頻度の高いsrcElementとtargetの統一も行っています。

noname#84373
質問者

お礼

ありがとうございます! これを書くにあたり、すでにチェックしてました。 他の人の書くものは、本当に勉強になります

関連するQ&A

  • popupでテキストフォームに入力する これを評価して欲しいのです

    アドバイスを受けながら作ってみました。 IE6以上だけの動作でOKです。 自分だけの考えでは偏った見方しかできないと思っているので 他の方々からのアドバイスをお願いします。 <html> <body> <input type="text" id="a" LIST="ラーメン/カレー/牛丼/ラーメン半ライス" onContextMenu="return popup();"> <input type="text" id="b" LIST="水/ウーロン茶/コーラ/カルピス" onContextMenu="return popup();"> <script> function popup(){ if(o=document.getElementById('popup')) with( document.body ) { onclick=null; removeChild(o) } var e = event.srcElement; var pmenu = document.createElement('div'); pmenu.id='popup'; with(pmenu.style){ backgroundColor = '#fff'; position = 'absolute'; border = '3px #999 double'; width = 'auto'; top = document.body.scrollTop + event.clientY + 'px'; left= document.body.scrollLeft + event.clientX + 'px'; padding = '2px'; fontSize = '90%'; } var item = e.getAttribute('list').split('/'); for(i=0;i<item.length;i++){ with(ob=document.createElement('div')){ oncontextmenu =function() {return false} onmouseover = function(){this.style.backgroundColor="#88f"} onmouseout = function(){this.style.backgroundColor="#fff"} onclick = function(){e.value=this.innerHTML;with(document.body){onclick=null;removeChild(document.getElementById('popup'))}} appendChild(document.createTextNode(item[i])); } pmenu.appendChild(ob); } with(document.body){ appendChild(pmenu); onclick = function(){ if(o=document.getElementById('popup')) with( document.body ){onclick=null;removeChild(o)} } } return false; }

  • JavaScriptの論理演算子について

    JavaScriptの論理演算子について質問です。 「alert(e.target||e.srcElement);」の結果がtrue かfalseではなくて「object HTMLHtmlElement」となるのは何故なのでしょうか? JavaScriptでは"||"は論理演算子ではないのでしょうか? ----------------------------------------------------------------------- <body> <a id="id1">Textarea</a> <script> (function () {   var i = document.getElementById ("id1");   document.addEventListener("dblclick", addEL, false);   function addEL (e) { alert(e.target||e.srcElement);   } }) (); </script> </body>

  • designMode=on のときのキーイベント処理

    HTMLエディタを使ったWEBアプリケーションを作っているのですが、 designMode=onにしてインナーフレームを編集可能にしたとき、 Mozillaの場合、キーイベントが反応せず困っております。(IEでは動きます) どなたか、ご存知のかたは教えてください。 よろしくお願いします。 OS : WindowsXP ブラウザ:firefox 2.0.0.4 ・ソース <html> <head> <script type="text/javascript"> var doc=null; function init(){ var doc = document.getElementById("testFrame").contentWindow.document; doc.designMode = "on"; doc.onkeydown = test; } function test(){ alert("OK"); } </script> </head> <body onload='init();'> <iframe id="testFrame" width="500px" height="500px" ></iframe> </body> </html>

  • 複数あるチェックボックスからひとつだけ選択

    よろしくお願いします。 複数あるチェックボックスから常にひとつだけしか選択できないように したく、色々調べてみたところ、下記のようなスクリプトを見つけました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>sample</title> <script type="text/javascript"> var before = null; function test(e) { var tgt = e.srcElement ? e.srcElement: e.target; if (before == tgt && tgt.checkd == true) { tgt.checked = true; } else { var chks = document.getElementsByName('radiolike'); for (var i = 0; i < chks.length; i++) { if (chks[i] != tgt) chks[i].checked = false; } } before = tgt; } </script> </head> <body> <form id="SAMPLE" action="#" onclick="test(event);"> <label for="c1"><input name="radiolike" id="c1" type="checkbox" value="0">Item1</label> <label for="c2"><input name="radiolike" id="c2" type="checkbox" value="1">Item2</label> <label for="c3"><input name="radiolike" id="c3" type="checkbox" value="2">Item3</label> </form> </body> </html> 上記のチェックボックス群を同ページに複数置きたいときは、どのよう にスクリプトを変えたらよいのか分からずとても困っております。 分かりづらい説明で誠に申し訳ありません。 補足説明致しますので、どうかご教授下さいますようお願い致します。

  • ファンクションキー制御?

    こんにちわです。 タイトル通りなのですが、 JSでは、 function kdown(e) {var msg =""; var flg = 1; switch(window.event.srcElement.tagName){ case "INPUT" :if(event.srcElement.type != "text" && event.srcElement.type != "password" && event.keyCode!=9 && event.keyCode!=16 && event.keyCode!=32){return false;}else{flg=0;}break; case "TEXTAREA" :flg = 0;break; case "SELECT" :flg = 0;break; case "A" :flg = 2;break; } switch(event.keyCode){ case 8 :msg = "BS";break; case 78 :if(event.ctrlKey){msg = "Ctrl+N";}break; case 82 :if(event.ctrlKey){msg = "Ctrl+R";}break; case 116 :msg = "F5";break; case 122 :msg = "F11";break; } if(event.altKey){msg = "Alt";} if (flg == 0 ){switch(event.keyCode){case 8 :msg = "";break;case 13 :msg = "";break;}} else if (flg == 2 && event.keyCode==13)msg = ""; if(msg != ""){event.keyCode = 0;return false;}else{return true;} } document.onkeydown = kdown; こんな感じに制御するのを、 アクションスクリプトで制御出来ますか? HTMLにこのJS埋め込んでも、FLASHの所クリックして、 各キー押すと意味なくなってしまうので・・ F5やF11など使用されたくないのですが・・・ 入れ替えなどでも良いのですが。。。 宜しくお願いします。

  • greasemonkeyでfunction動かない

    greasemonkeyでスクリプトを作成したいのですが、テスト用に書いたjavascriptをぐれもんに設定したところ、スクリプトが起動しなくなりました。 ※javascript、greasemonkey共に初心者です。 ご指摘いただけると幸いです。 HTML部分は、既存のサイトにつき変更できないため、ぐれもん(JS)にて、追加機能を持たせたい。 ======= 作成したサンプルソース JSで作成した、最下部の入力文字を発送日窓複数に一括反映するためのスクリプトです。 ======= <SCRIPT LANGUAGE="JavaScript"> <!-- window.onload=function(){ var myForm=document.createElement('form'); myForm.setAttribute("name","frm_test2"); var inps=new Object; inps[0]=document.createElement('input'); inps[0].setAttribute("type","text"); inps[0].setAttribute("name","atai"); inps[0].setAttribute("value",""); inps[1]=document.createElement('input'); inps[1].setAttribute("type","button"); inps[1].setAttribute("onClick",'test()'); inps[1].setAttribute("value","実行"); for(var i in inps){ myForm.appendChild(inps[i]); } document.body.appendChild(myForm); } function test(){ num = document.rjForm2.length for (var i=0; i<num; i++){ formname = document.rjForm2[i].name; formname=formname.substring(0,13); if (formname=="shipping_date"){ document.rjForm2[i].value = document.frm_test2.atai.value; } } } //--> </SCRIPT> <body> <form name="rjForm2"> <table> <tr> <td> <input type="text" name="shipping_date_123456-12345678-123456781">発送日 </td> </tr> <tr> <td> <input type="text" name="pay_date_123456-12345678-123456781">振込日 </td> </tr> </table> <table> <tr> <td> <input type="text" name="shipping_date_123456-12345678-123456785">発送日 </td> </tr> <tr> <td> <input type="text" name="pay_date_123456-12345678-123456785">振込日 </td> </tr> </table> </form> </body> ====== 上記JS部分を以下のようにgreasemonkeyに反映した経緯と、結果 ・サイトで見つけたサンプルを元にwindow.onloadの前後は、()を使ったら、この部分は、実行できた。 ・しかし、function test部分は、()を使ってもできず、firebugでは、「test is not defined」と出て、発送日窓に一括登録ができない。 ====== 以下、greasemonkeyに設定したスクリプト ( window.onload=function(){ var myForm=document.createElement('form'); myForm.setAttribute("name","frm_test2"); var inps=new Object; inps[0]=document.createElement('input'); inps[0].setAttribute("type","text"); inps[0].setAttribute("name","atai"); inps[0].setAttribute("value",""); inps[1]=document.createElement('input'); inps[1].setAttribute("type","button"); inps[1].setAttribute("onClick",'test()'); inps[1].setAttribute("value","実行"); for(var i in inps){ myForm.appendChild(inps[i]); } document.body.appendChild(myForm); }()); function test(){ num = document.rjForm2.length for (var i=0; i<num; i++){ formname = document.rjForm2[i].name; formname=formname.substring(0,13); if (formname=="shipping_date"){ document.rjForm2[i].value = document.frm_test2.atai.value; } } } ======= 何卒よろしくお願いいたします。

  • JQueryでfunctionに引数としてIDを渡して処理する方法

    HTMLの制御にjQueryを使用しています。 functionに引数としてIDを渡して処理をしたいのですが、やりかたが分かりません。 テスト的にtest1Script、test2Scriptを作成しました。 test1と同様の結果を、引数にIDを渡すtest2Scriptでも得たいのですが、 失敗(1)や失敗(2)のように書いた場合、うまくいきません。何か良い方法はないでしょうか。ご教授下さい。 <script type="text/javascript"> function test1Script(){ alert($("#textfield1").val()); } function test2Script(objId){ //alert($("#objId").val()); 失敗(1) //alert($(#objId).val()); 失敗(2) } </script> </head> <body> <input type="text" id="textfield1" value="test1" /> <input type="button" id="button1" value="テスト1" onclick="test1Script();" /> <input type="button" id="button2" value="テスト2" onclick="test2Script('textfield1');" /> </body> </html>

  • 複数のイベントリスナーを設置するのは正しい?

    クリック時、マウスオーバー時、マウスアウト時の処理を作るとき、 イベントリスナーの使い方はこのようなやり方でよいでしょうか。 var d = document.getElement.ById("id"); d.addEventListener('click', function(e){ var tar=e.target; tar.style.backgroundColor ="#000000"; },false); d.addEventListener('mouseover', function(e){ var tar=e.target; tar.style.backgroundColor ="#aaaaaa"; },false); d.addEventListener('mouseout', function(e){ var tar=e.target; tar.style.backgroundColor ="#555555"; },false);

  • jquery自体をJavaScriptで読み込む

    以下のようなものを想定して、jquery.js という中身がjqueryでないものから jqueryの実態を読み込みをさせようとしているのですが、うまくいきません。 ・jquery 2以降は、IE8以前をサポートしなくなるので、useragentで  読み込むjqueryを選択したい。 ・現在、CGIスクリプト上で、jqueryの読み込みを判断しているが、できれば  外部JavaScriptで巨大なjqueryの読み込みの判断をさせたい。 ・キャッシュされたとしても、ライブラリであることから、圧縮して70kバイトと  あまりにも巨大である ・(googleapiを利用すると、IE8以前では、プライバシーの警告が出る場合がある) 確かに、スマホにjqueryを普通に読み込ませても、何も問題なく動作しますが、 相当がんばって圧縮をしても70kバイト程度のライブラリを、使用しないのに 読み込むというのも気が引ける部分もあります。 何とか、動的に、かつ、何も問題なく、jqueryをJavaScriptで読み込む方法は あるでしょうか? このようなコードは、document.bodyがnullであるため、はじかれてしまいます。 var script = document.createElement('script'); script.src = 'http://hoge/jquery-1.js'; document.body.appendChild(script); var callee = arguments.callee; var interval = setInterval(function() { if (!document.evaluate) return; clearInterval(interval); interval = null; callee(); }, 100); このコードでも、jqueryを使用するものが、jQueryがないというエラーで、うまくいきません var scrptE = document.createElement("script"); scrptE.setAttribute("type", "text/javascript"); scrptE.setAttribute("language", "JavaScript"); scrptE.setAttribute("src", "http://hoge/jquery-1.js"); document.getElementsByTagName("head")[0].appendChild(scrptE); 以下のようなのは、googleapiのため、使わないものと考えます。 http://phpjavascriptroom.com/?t=ajax&p=jquery よろしくお願いします。

  • 配列をfunctionに渡す方法

    画像プレロードのjQueryを書いているのですが、うまく動いてくれません。 最後の行の、preloadImg(preloadImgList);の箇所での渡し方が失敗しているのですが、 変数に入れた配列を、関数に渡すことはできないでしょうか。 preloadImg("a","b","c")というかたちにして、直接引数の部分を記述すると動作するのですが、配列の格納された変数にすると、1つの文字列として渡されるようなのです。 ====================================== function preloadImg(){ for(var i = 0; i<arguments.length; i++){ $("<img>").attr("src", arguments[i]); } } $('a.modal').each(function(){ preloadImgList.push($(this).attr('href')); }); preloadImg(preloadImgList); ======================================