2011-01-20 5 views
0

$(document).ready();同じページでも可能です。クリックイベントにも同様のものが必要です。jQuery:同じ要素上の同じイベントで、2つの異なる時点で複数のアクションを実行する

状況:

$('#element').live('click', function() { /* Do this */}); 

それは#elementのライブ()をクリックし、リスナーがあります: 別のチームが外部JSファイルでこのどこかを実装しました。このコードやそのファイルを変更することはできませんが、同じイベントで同じ要素に対して追加の操作を行う必要があります。したがって、#elementをクリックすると2つのアクションが発生します。言い換えれば、私はこれと同等のものが必要です:

$('#element').live('click', function() { /* Do this */}); 
/* Some code later... */ 
$('#element').live('click', function() { /* Add another action */}); 

私は上記をやってみましたが、2番目の呼び出しは起動しません。 #elementが動的に追加されるので、.live()である必要があります。

#elementの同じイベントに他のアクションを追加する方法はありますか?ありがとう。

+0

イベントハンドラがfalseを返すようです。それは私の呼び出しを停止しますか? $( "#element")。live( 'click'、function(){p.log_in(); false false;}); – Stephen

答えて

1

彼らは偽を返しているので、あなたの出来事は解雇されなくなります。

http://api.jquery.com/bind/はハンドラからfalseを返すを参照してください。イベント オブジェクトの両方 .preventDefault()と .stopPropagation()を呼び出すのと同じ です。

+0

ナッツ... jQueryの文書の引用に感謝します。私は他のチームのコードを変更することはできませんが、ChessWhizの答えに基づいて問題を別の方法で見て回る別の方法を見つけました。私は私のチームがその上でHTMLをコントロールしていることを知りました。 #elementに新しいクラス名を追加し、.live()でそれをターゲットにしました。それは動作します。 – Stephen

0

実際には既存のlive()呼び出しをバインド解除し、独自のコードとともに独自のメソッドに組み込むほうが簡単かもしれないことをお勧めします。それはあなたが許可されていると仮定しており、そうすることが現実的です。

+0

彼らの呼び出しは別のライブラリと名前空間にあるので、私はそれをアンバインドして自分のコードを私のものに追加することはできません。 – Stephen

0

イベントハンドラをバインドするたびに、そのハンドラを一連のハンドラにインストールします。ハンドラのすべてが呼び出されます。あなたが変更できないコードに加えて自分自身を縛ることは大丈夫です

+0

イベントハンドラがfalseを返すようです。それは私の追加を停止しますか? $( "#element")。live( 'click'、function(){p.log_in(); false false;}); – Stephen

関連する問題