2012-08-06 21 views
65

こんにちは私は新しいプログラマーであり、まだ学習しています。 これは私が把握しようとしていますコードです:DIV(ボタン)にIをクリックするとhtml要素に添付されたイベントを確認するにはどうすればよいですか?

<div id="buy" class="buy button">Buy</div> 

、いくつかのJavaScriptコードが実行されますが、私はそれがなかったかわかりません。クリックが発生したときにどの機能が起動されるのかをどのように知ることができますか?リスナーがこの要素に接続されているいくつかの方法を

+0

イベントハンドラはどこですか? –

+0

divにイベントハンドラがどのようにアタッチされているかを確認していますか? – Blazemonger

+2

サイドノート:divをボタンとして使用しないでください。代わりにまたはIm a linkを使用してください。 –

答えて

23

FirefoxとFirebugを使用している場合は、FireQueryをインストールすることができます。 を参照してください。を参照してください。ハンドラはjQueryによってバインドされています。 http://firequery.binaryage.com/

+11

jQueryを使用して添付されたことをどのように知っていますか? –

+0

FireQueryが私が探していたようだ。このツールを使用すると、どのようなイベントがどの要素にバインドされているかをいつでも知ることができます。またonchangeイベント、onmouseoverなど。 –

+4

これはプレーンなJavascriptを – jAndy

5

使用jQuery("#buy").data('events');

http://api.jquery.com/jQuery.data/は面白いかもしれません。

+2

は、どのようにそれはjQueryを使ってバインドされた知っていますし、要素に直接結合? –

+0

これは推奨されません。 – pimvdb

+0

コンソールはそれがあると言います「未定義」。 – derloopkat

0

jQueryを使用していますか?もしそうなら、あなたは次の3行のコードのいずれかを検索したい:

$("#buy").click //the div is refered by its id 

または

$(".buy").click //the div is refered to by the style "buy" 

または

$(".button").click //refered to by the style "button" 

最近のほとんどのブラウザでは、それらに組み込まれた「開発者ツール」を持っていますF12(少なくともIEとChromeでは)を押してください。それはさらにデバッグとトレースを行うのに役立ちます。

+0

ありがとう、私は警告したとき、私は関数の本体を見ることができますが、私がそれを編集することができますどこにあるか私が見ることができません。 –

+5

だけよりも要素をバインドするために、より多くの方法があります。たとえ'click'が使用された場合、セレクタは非常に異なる場合があります。 –

4

従来のelement.onclick=ハンドラまたはHTML <element onclick="handler">を使用して接続されたイベントハンドラは、スクリプトまたはデバッガのelement.onclickプロパティから簡単に取得できます。

DOMレベル2のイベントを使用してイベントハンドラをアタッチします。addEventListenerメソッドとIEのattachEventは、現在スクリプトから取得できません。 DOM Level 3は、すべてのリスナーを取得するためにelement.eventListenerListを提案しましたが、最終的な仕様にするかどうかは不明です。今日のどのブラウザにも実装はありません。

13

ECMAscript自体を使用して「ちょうど」することは本当にうまくできません。例えば、簡単にノード自体にその財産を横取り当然のことができます

document.getElementById('buy').onclick = function() {}; 

の形でDOMレベル1で追加されたクリックイベントハンドラがあった場合。 DOM Level 2.addEventListener()と対戦すると、状況がさらに複雑になります。.attachEvent()。今では、すべての異なるリスナーがどこからバインドされているかを探す「場所」はありません。

これはjQueryを使用すると改善されます。 jQueryは、呼び出しのDOMノードにリンクされている特別なオブジェクトにすべてのイベントハンドラ関数を保持します。あなたはjQueryのようなライブラリも使用しているので、今、私はすでにノードにイベントリスナーを結合する3つの異なる方法(実際にはその2を説明した。しかし、

$('#buy').data('events'); 

のようなノードのための.data() -expandoプロパティを取得することにより、それをチェックすることができますもちろんDOMレベル1または2の方法)。

イベントが委任によって誘発された場合、実際には醜い状態になります。つまり、私たちはクリックイベントを親ノードにバインドして、そのイベントが私たちにバブリングするのを待っているので、targetを確認することができます。だから、nodeevent listenerの間には直接の関係はありません。

結論ここには、ブラウザプラグインのルックスアウト、おそらくVisualEventのようなものがあります。

+0

+1徹底的な答え。唯一の事は、イベントが祖先にバインドされている場合、 '.data( 'events')の解決策は役に立たないということです。 –

+0

@amnotiam:あなたはそうです、それについてのセクションを追加します。 – jAndy

3

FireFoxを使用している場合は、FireBugをインストールする必要があります。いったんこれを取得すると、FireQueryをインストールできます。FireQueryは、jQueryイベントがどのオブジェクトにバインドされているかを示します。

http://getfirebug.com/

http://firequery.binaryage.com/

+3

jQueryを使用して添付されたことをどのように知っていますか? –

+0

あなたはそうしていませんが、そうだった場合は、FireQueryが表示します。 –

+1

これは、とにかくjQueryでバインドされたイベントに対してのみ機能します。 – jAndy

0
  1. 右クリックしてページ、および$("#buy")と何か場合onClickまたは.on("click",function(){...});
  2. を言及するため<script>タグ
  3. ルックを探すページのソース
  4. を表示するように選択あなたはそれを見つけることができない、tに沿って何かを検索するHESEライン:あなたはfunction発見したdocument.getElementById("buy")
  5. 、またはイベントハンドラのコードは

$("#buy")あるコードは、buyid属性を持つ要素を見つけるというのはjQueryの方法であり、それは.を持っている場合その関数の後ろにJQueryが検出した要素に対してその関数が作用しています。

+1

祖先に拘束された場合はどうなりますか? –

+0

は、それが外部ソースでなければならない:S –

+0

@VasoApostolidouそうであればあるだろう '<スクリプトSRC =「...」タイプ=『テキスト/ javascriptの』>'どこかのページで。そのJSファイルを 'src'属性で見つけ出し、それに移動します。 –

2

以下は私があなたが探しているかもしれないと思う過去に使用したものです。これは、ページ要素のプロパティを監視することです(下の例では、ドキュメントの「Title」プロパティです)。そのプロパティが変更されると、JSコールスタックにアラートが表示されます。あなたが火災を見つけようとしているコードの前に、これをDOMに入れておく必要がありますが、問題の原因を特定することができればうれしいです。

Firefoxを使用し、FirebugのJavaScriptデバッグをお勧めします。

// Call stack code 
function showCallStack() { 
    var f=showCallStack,result="Call stack:\n"; 

    while((f=f.caller)!==null) { 
     var sFunctionName = f.toString().match(/^function (\w+)\(/) 
     sFunctionName = (sFunctionName) ? sFunctionName[1] : 'anonymous function'; 
     result += sFunctionName; 
     result += getArguments(f.toString(), f.arguments); 
     result += "\n"; 
    } 
    alert(result); 
} 


function getArguments(sFunction, a) { 
    var i = sFunction.indexOf(' '); 
    var ii = sFunction.indexOf('('); 
    var iii = sFunction.indexOf(')'); 
    var aArgs = sFunction.substr(ii+1, iii-ii-1).split(',') 
    var sArgs = ''; 
    for(var i=0; i<a.length; i++) { 
     var q = ('string' == typeof a[i]) ? '"' : ''; 
     sArgs+=((i>0) ? ', ' : '')+(typeof a[i])+' '+aArgs[i]+':'+q+a[i]+q+''; 
    } 
    return '('+sArgs+')'; 
} 

var watchTitle = function(id, oldval, newval) { showCallStack(); } 

// !! This is all you should need to update, setting it to whatever you want to watch. 
document.watch("title", watchTitle); 
+0

'watch'メソッドはおそらくFirefox(Geckoブラウザ)でのみサポートされていますか? – MrWhite

2

これは私がそれを行う方法を見つけた最も簡単な方法です:JavaScriptでイベントを操作するとき、イベントが購読しているもののトラック を失うことは、多くの場合は簡単です http://www.sprymedia.co.uk/article/Visual+Event

どこに。 が多数のイベントを使用している場合は、これは特に当てはまります。これは、プログレッシブエンハンスメントを使用する現代の インターフェイスでは一般的です。 Javascriptライブラリ テクニカルポイント からリスナーに別の程度の複雑さを加え、開発者の視点から彼らはもちろん、 の生活をはるかに簡単にすることができます!しかし、何かがうまくいかないときは、 これがなぜ起こっているのかを突き止めることは難しいかもしれません。

私がこれらのイベントが何であるか、一緒に視覚的に購読 イベントがあるページの要素を示し ビジュアルイベントと呼ばれるJavaScriptのブックマークレットを入れていると、イベントを 機能を実行します。このためですトリガーされたとき。これは、基本的に のデバッグを支援することを目的としていますが、他のページで購読されたイベントを見るには、非常に興味深く有益な になることもあります。

ツールバー(FFまたはChrome)にドラッグするとブックマークボタンが表示され、添付されているイベントを表示するページのボタンをクリックするだけです。よく働く! (少なくともjQueryやその他のライブラリによって添付されたイベントの場合)。グーグルクロームの開発ツールで

103

(レンチアイコン> [ツール]> [開発者ツールをクリック)、Elementsタブで要素を選択し、右側には、すべてのイベントを参照しますよ「イベントリスナー」パネルを開き

+8

+1ニース。私はChromeのツールにそれがあることに気付かなかった。 –

+1

これは私がいつもしていることです。 – Gromer

+4

ホットキーが大好きな方には、F12を押すとこれも開きます。 –

9

"Visual Event 2"スクリプトをブックマークまたはChrome extensionと同じスクリプトとして使用できます。

このスクリプトは、DOM要素に接続されているすべてのjsのイベントを示しています。

+0

DOMレベル0のすべてのイベントと広く使用されている既知のバージョンのすべてのイベントフレームワーク(jQuery、プロトタイプ、Mootools、YUIなど)純粋なJavaScriptで接続されたDOMレベル2のイベントオブザーバを表示することはできません。 – Victor

関連する問題