1

まあ、私はここにたくさんいます... とにかく、それは問題です。バインドされていない関数があり、一定時間後に戻る必要があります (できればビデオの再生が停止したときですが、今は一定の秒数だけ進んでいます)。

ここ (jquery フォーラム)で私のような問題を抱えている人を見つけましたが、解決策 (最初の応答) を適用しようとしましたが、うまくいきませんでした。

これが私がやろうとしたことです

$('li', '.thumbs').bind('touchend click', playVideo);


$('li', '.thumbs').bind('touchend click', function() {
        //some code
        playVideo( $(this).index() );
        $("li", ".thumbs").unbind('click');
        setTimeout(function(){
            $('li', '.thumbs').bind('touchend click');
            },5000);
        });

なぜ?

**編集OK、タイムアウトでバインドが戻ってきましたが、何らかの理由で関数が完了していませんplayVideo。再生中のビデオは停止しますが、新しいビデオは開始されません...

4

3 に答える 3

2
$('li', '.thumbs').bind('touchend click', onPlayClick);

function onPlayClick(){
    //some code
    playVideo( $(this).index() );
    $("li", ".thumbs").unbind('click', onPlayClick);
    setTimeout(function(){
        $('li', '.thumbs').bind('click', onPlayClick);
    },5000);
}

また、jQuery 1.7 以降を使用している場合は、on()/off()が優先されます。例:

$('li', '.thumbs').on('click', onPlayClick);
$('li', '.thumbs').off('click', onPlayClick);
于 2012-05-24T04:49:22.017 に答える
1

setTimeout 内では、要素を関数にバインドしていません。コールバック関数を追加すると、問題が解決されます。

setTimeout(function(){
    $('li', '.thumbs').bind('touchend click', playVideo);  // added callback
},5000);

以前にイベントを登録し、その要素のイベントで unbind を呼び出した場合でも、イベントを再バインドするときはいつでも、イベントがトリガーされたときに呼び出す関数を明示的に渡す必要があることに注意してください。

また、setTimeout および setInterval コールバック関数にはグローバル スコープがあることに注意してください。つまり、「ウィンドウ」レベルで表示されます。関数 playVideo が setTimeout から見えるグローバル スコープで定義されていることを確認する必要があります。

于 2012-05-24T04:50:32.097 に答える
1

これはうまくいくはずです。

$('li', '.thumbs').bind('touchend click', playVideo);    
$('li', '.thumbs').bind('touchend click', function() {
    //some code
    playVideo( $(this).index() );
    setTimeout(function(){
        $('li', '.thumbs').unbind().bind('touchend click',playVideo);
        },5000);
    });

この場合、タイムアウトが設定されるたびに、以前のバインド関数をバインド解除してからバインドする必要があるためです。また、バインド中にコールバック関数が必要です。

または、クリックする場所がわかっている場合は、バインディングの代わりにクリックをトリガーできます。
たとえば、クラスの親指をクリックする場合。その後

  $('.thumbs').trigger('click');   
于 2012-05-24T04:59:37.190 に答える