2

私のマークアップ:

<ul id="playerControls">
    <li class="play-bt"></li>
</ul>

そして、再生ボタンが押された場合に発生するこのイベントがあります。

$(".play-bt").bind('click',function(){
    $(this).toggleClass('pause-bt');
});

今、play-btクラス名が に変更されたと仮定していpause-btますが、どうしてこのイベントが発生するのですか:

$(".pause-bt").bind('click',function(){
    console.log('PEW');
});

解雇されない?

4

3 に答える 3

5

ここで、.play-bt クラス名が pause-bt に変更されたと仮定します。

toggleClassそのようには機能しません。

toggleClassaddClassとの組み合わせですremoveClass

toggleClass指定されたクラスが存在するかどうかをチェックします。

  • 存在する場合は、要素から削除します。
  • そうでない場合は、要素に追加します。

イベントが発生しない理由については、 class を割り当てる前にpause-btそのクリック イベントをバインドする必要があるためです。

bind()その時点でセレクターに一致するすべての要素を検索し、関数をイベント ハンドラーに割り当てます。

このイベントを再バインドするか、live()代わりに使用する必要がありますbind()

live():

現在および将来において、現在のセレクターに一致するすべての要素のイベント ハンドラーをアタッチします。

http://api.jquery.com/live/

于 2012-08-08T14:07:34.070 に答える
3

.bind()その時点で存在する要素のみをキャプチャします。要素には最初にそのクラスがなかったため、バインドされませんでした。jQuery のバージョンに応じて、 または のいずれかが.live()必要.on()です。

于 2012-08-08T14:07:18.563 に答える
0

バインディングを最初に設定したとき、対象の要素にはそのクラスがなかったからです。jQuery .on() 関数を使用して、次のようにコンテナーにバインドします。

$('#playerControls').on('click', '.pause-bt', function(){
      console.log('PEW');
});

イベントは #playerControls で発生し、その時点で.paust-bt探します。

于 2012-08-08T14:10:10.710 に答える