jQuery bind時のeventに関する疑問:Android版OperaとFireFoxの違い

このQ&Aのポイント
  • スマートフォン向けのWebページを作成する際、jQueryを使用してタッチイベントを取得したいと考えています。
  • Android版Operaでは表示されたのは「object TouchEvent」でしたが、Android版FireFoxでは動作しないことが判明しました。
  • FireFoxでwindow.eventに該当するオブジェクトを取得するにはどのような手順が必要なのでしょうか?
回答を見る
  • ベストアンサー

jQuery bind時のeventについて

お世話になっております。 当方JavaScriptは不慣れなため、的外れな質問になってしまうかもしれませんが、その際はご指摘を頂けるとありがたいです。 スマートフォン向けのWebページを作成するにあたり、jQueryを用いてタッチイベントを取得しようと考えています。 以下に簡略化したソースを掲載致します。 /*--------------------------------------------*/ <script type="text/javascript"> $(function(){ $('#id').bind('touchstart',function(e) { alert(event); }); }); </script> /*--------------------------------------------*/ この際、Android版Opera上で表示されたのは、「object TouchEvent」でした。 その後主要なブラウザで動作確認をしていたところ、Android版FireFoxでは動作しないことが判明しました。 調べたところ、Gecko系のブラウザではwindow.eventという属性は存在せず、引数であるeに格納されているとのことだったので、alert(e);として確認したところ、表示されたのは「object Object」でした。 本来であればevent.changedTouches[0].pageX等の値を取得したいのですが、引数のeが目的とするオブジェクトではないようなので、値を取得できません。 1. そもそもこのeventは、window.eventという認識で良いのでしょうか? 2. FireFoxでwindow.eventに該当するオブジェクトを取得するにはどういった手順が必要なのでしょうか? 以上2点、ご教授頂けると幸いです。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

スマートフォンはまったく知らないので、推測だけですが… 多分、eにイベントオブジェクトが返されているのではないかと推測します。 (必ずしも、window.eventと同じではありません。) 試しに、alert(e.type); などとして確認してみてください。 それでもわからない場合は、for(i in e)などでeの属性を調べてみてはいかがでしょうか? イベントオブジェクト https://developer.mozilla.org/ja/DOM/event

Zanggy
質問者

お礼

ご回答ありがとうございます。 ご指摘の通りe.typeにはTouchStartが格納されていましたが、結果的にこのオブジェクトから目的とするTouchEventオブジェクトを得る方法がわかりませんでした。 その後試行錯誤したところ、arguments内に目的とするTouchEventオブジェクトが格納されていることがわかり、目的は達成されたものの、結局eとeventの関係性はわかりませんでした。 個人的な事情からお礼が遅れてしまったので、ここで一度締め切らせて頂きます。 お付き合い頂きありがとうございました。

関連するQ&A

  • イベントリスナに登録される function(e){} の "e" はeventオブジェクト?

    私はイベントリスナ登録時の匿名関数に渡す引数eの意味が今まで理解できていませんでした。 最近、下記コードを実行することで、 <script type='text/javascript'> window.addEventListener ('click', function(e){ console.info(e); // 引数をコンソール表示 (要Firebug) for (p in e){ console.info(p + ' = ' + e[p]); // プロパティを列挙 } }, false); </script> 「eventオブジェクトを渡しているらしい」と朧気ながら理解できました。 ただ、疑問点も残ります。 私の理解では、匿名関数は (function(str){ alert(str); })('Hello'); のように明示的に引数を渡さなければ、引き渡された値は undefined となるはずでした。 変数eの値はどこから出現したのでしょうか? そもそも、変数eはeventオブジェクトなのでしょうか?

  • イベントの関数について、よくわからないことがあります。

    イベントの関数について、よくわからないことがあります。 (1)引数をセットしない関数と window.document.onmousemove = f; function f(evt) { alert(evt); } (2)無名関数?に引数 window.document.onmousemove = function(e) { alert(e); } (1)(2)は同じ動作なのですが、window.document.onmousemoveにセットする関数の引数は 特殊なのでしょうか?

  • ASP.NET2.0 Javascript

    皆様はじめまして。 ASP.NET2.0にて開発中です。 初歩的な質問となってしまうかもしれませんが、テキストボックスやラベル等のコントロールのtextの値をJavascriptで取得したいのですが、下記コードではオブジェクトとなってしまいます。 どのように記述すれば値を取得できるかご教授いただけないでしょうか?? <SCRIPT language="javascript"> function window.onload() { var spread = document.all("FpSpread1"); var str = document.getElementById("lblCount"); alert(str); spread.onEditStart = estart; } function estart(event){ if (event==null) event = window.event; if (event.row >= str.value && event.col == 1) event.cancel=true; //1行目の編集開始はキャンセルする if (event.row >= str.value && event.col == 1) alert("変更するな"); } </SCRIPT> ※var str = document.getElementById("lblCount");  ←ラベルコントロールから値を取得 alert(str);                 ←アラートにて取得の確認([object]となってしまいます。) 宜しくお願い致します。

  • オブジェクトとイベントにつきまして

    javascript超初心者です。。 今仮に、スクリプトの中でメソッド、プロパティ、イベントやイベントハンドラの前に、オブジェクトを入れるとします。(たとえば、window.aleart~など) その中でも、イベントやイベントハンドラをスクリプトの中に書くとして、ナビゲーターオブジェクトをその前に書く時、documentなのかwindowなのか、また他のオブジェクトなのか、使い分け方が分かりません。 大変稚拙な質問で申し訳ありませんが、javascriptの先輩方、どういうイベント(イベントハンドラ)の時にwindowで、どういうイベント(イベントハンドラ)の時にdocumentなのか等、ご回答頂けると本当に助かります。 どうぞよろしくお願い致します。

  • jQueryのイベントに引数を渡したい

    例えば以下のような既存のJavaScriptのコードをjQueryのイベントで書き直したい場合、関数の引数で渡していた値は、どうやって渡すのでしょうか? 【html】 <a href="" onclick="func_a('abc'); return false;"></a> 【JavaScript】 faunction func_a(param_a){ alert(param_a); } 以下のようにすれば渡せないことはありませんが、かなり強引な感じがします。 【html】 <a href="" class="abc"></a> 【jQuery】 $(function() { $("a").click( function(){ var param = $(this).attr("class"); alert(param); return false; } ); }); こういう場合はjQeuryであっても、onclick属性で関数を呼び出すのが普通なのでしょうか? ご存知の方がいらっしゃいましたら教えてください。 よろしくお願い申し上げます。

  • イベントevt?evt.target:event.srcElement;の意味合い

    以下の理解で合っているのでしょうか? よくイベントの取得で エレメント.onclick = function(evt){ var e = evt?evt.target:event.srcElement; } でeにイベントオブジェクトの発生元要素をセットしているのを見かけますが、 これは、ブラウザーの違いの吸収なのでしょうか? firefoxでは、イベントハンドラー関数にイベントオブジェクトが渡されるので、渡されたイベントオブジェクトよりevt.targetで発生元要素をセットし、一方IEでは、eventという名前のオブジェクトが存在している(?)ので、イベントハンドラー関数にイベントオブジェクトが渡されず、event.srcElementで発生元要素をセットする。  ※Opera、Safariは何でも良い IEの場合、後から、イベントが追加されたらeventオブジェクトはどうなるのでしょうか?ある要素の一つのイベントタイプには一つのイベントハンドラーしか定義できないのでしょうか?

  • イベントハンドラを外部ファイルに分離させた時のevent.target

    イベントハンドラを外部ファイルに分離させた時のevent.target||event.srcElementの挙動について質問です。お願いします。xhtmlの<div>に直接書いていたeventハンドラを外部に分離しました。 JavaScript ------------------------------ function Test() { var n = document.getElementsByTagName('div')[0]; n.onmouseover = function() { var m = event.target||event.srcElement; var j = m.tagName; alert(j); } } $(function() { Test(); }); ------------------------------ xhtml ------------------------------ <div> <p><img src="img01.png" width="300" height="300" /></p> </div> ------------------------------ n.onmouseover後のfunction()ですが、FireFoxで動きません。 function()をfunction(event)にするとFireFoxで動くようになりますが、IEで動かなくなります。 FireFox、IE両方動くようにするにはどういう記述にしたらいいでしょうか?

  • IE8で動かないJQuery

    Javascriptのカテゴリとどちらに質問するか迷いましたが、 こちらで質問させていただきます。 ちなみにJQueryやJavascriptには慣れていません。 以下のような方法で、セレクトボックスで選択された値をcode.cgiに 引き渡し、code.cgiが返す値をalertで表示しようとしています。 セレクトボックスのIDは selectid です。 code.cgiでは、いくつかの値を : で区切って表示(返す)しています。 FirefoxやSafari、またIE7のときには動いたのですが、 IE8(Windows7と一緒にインストールされたもの)では なぜか動きません。 原因の分かる方いらっしゃいますでしょうか。 <script type="text/javascript"> $(function(){  $('#selectid').change(function(){     $.get("code.cgi?code=" + $('#selectid').val(), function(data){      var a;      a = data.split(":");      alert(a[0]);     });   }); }); </script>

    • ベストアンサー
    • AJAX
  • onbeforeunload時のwindow.openが効かないのです

    onbeforeunload時のwindow.openが効かないのですが… ページ内に設置した「閉じる」ボタン、またはブラウザの「閉じる」を押したときに、 新規ウィンドウが立ち上がるようにしたいのです。 複数台でテストすると、半数が新規ウィンドウが立ち上がりません。 まずIEでunloadが効かない場合がある事から、 以下サイトよりonbeforeunloadのスクリプトを引っ張りました。 http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/ で、 <SCRIPT LANGUAGE="JavaScript"> ~上部省略~ function unload() { //alert('Unload event occured.'); window.open('test_b.php'); }; </script> <body onbeforeunload="unload()"> と記述したのですが、 前述で新規ウィンドウが立ち上がらなかった台が、 アラートだと出すのですが、window.openに反応しません。 何か解決方法はありますでしょうか。 javascriptに関して全くの初心者ですので、四苦八苦しながらテストしています。 もし解決方法をご存じの方はソース例を教えて頂くと大変助かります。 宜しくお願いします!

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

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

専門家に質問してみよう