1

YouTube でビデオを検索するためのこの簡単なスクリプトを作成しましたが、このコードの奇妙なエコーがあります。

var nPageToken = response.nextPageToken;
if (nPageToken){
    $('#moreButton').css('display','block');
    $('#moreButton').click(function(){
        searchRequest('', nPageToken);
    });
} else {
    $('#moreButton').css('display','none');
}

ページの下部にある「その他の結果」を 4 ~ 5 回クリックすると、奇妙な効果が発生します。これは完全なコードです。ホームページを試して、下部にある「詳細ボタン」を 4 ~ 5 回クリックしsearchrequestて、同じ繰り返しを確認しpageTokenてください。理由がわかりません。助けていただけますか? ありがとうございました

4

1 に答える 1

0

コメントの説明を考慮すると、関数$('#moreButton').click(...)内から呼び出すことはできません。これは、別の呼び出しを行っているためです。何が起こっているかは次のとおりです。searchRequestsearchRequest

  1. searchRequest初めて呼ばれます。true の場合nPageToken(つまり、null、undefined、false、または 0 ではない)、クリック ハンドラ#moreButtonが追加され、searchRequestそのボタンがクリックされたときに呼び出されます。

  2. ボタンをクリックすると、searchRequest呼び出されます。ただし、if (nPageToken)合格した場合は、2 番目のクリック ハンドラーを追加することになるため、ボタンを次にクリックするとsearchRequest 2 回呼び出されます。

  3. ボタンをもう一度クリックすると同じことが起こり、searchRequest次のクリックで 4 回呼び出されます。など、指数関数的に成長しています...

解決策は、この部分を外側に移動しているようですsearchRequest:

$('#moreButton').click(function(){
    searchRequest('', nPageToken);
});
于 2013-04-28T18:02:59.727 に答える