2

github から入手した jQuery ゲーム (単純なカード メモリ ゲーム) があります。

「新しいゲーム」ボタンがないため、ゲームが終了すると、ページを更新せずにゲームを再開する方法はありません。

ページ全体を更新したくないので、このようなクリックイベントを作成してみました。

<li style="color:black; font-weight:600"><a href="#">new game</a></li>

$(document).ready(function() {
    $('a').click(function() {
            $("body").load("game.js");
            });

});          

クリックすると、外部の .js は置き換えられません。

私はグーグルで検索しましたが、何も見つかりませんでした。

多分これは不可能ですか?.js がロードされると、その .js を .click で削除する方法がないことを読みました。

本当?

読み込まれた .js を置き換えることができない場合、「新しいゲーム」機能を構築するにはどうすればよいですか?

この単純でありながら不可解な (私のような初心者には不可解な) 質問に答えてくれてありがとう。

4

4 に答える 4

1

悪い副作用、変数がまだ古い値に設定されているなどがあります。スクリプトのリロードは、ページの更新と同じではありません。

たとえば、変数currentScoreが 0 から始まり、プレイ中に上昇する場合、スクリプトをリロードしても必ずしも 0 にリセットされるとは限りません。おそらく 51245 または最後のスコアのままであり、基本的にすべてが台無しになります。これは、他の無数のものにも当てはまります。行っていたインターバルが倍増します。イベントが再び追加され、古いものは設定解除されず、すべてが二重に呼び出されます。リストは延々と続きます。

基本的に、このゲームのアーキテクチャは貧弱で、適切にリセットするには作業が必要です。何かのロジックとアーキテクチャに根本的な欠陥がある場合、それを機能させるための迅速な修正ほど単純ではないことがよくあります。ゲームの再起動などの機能は、多くの場合、コードの最初の行からコーディングの一部として計画する必要があります。

于 2012-10-18T23:53:07.420 に答える
0

見てjQuery.getScript()- jQuery.getScript() url

于 2012-10-18T23:29:22.837 に答える
0

スクリプトを取得して再度実行したとしても、グローバル変数や DOM に残されたジャンクによる奇妙な副作用が長引く可能性があると思います。おそらく、スクリプト自体をクリーンアップさせるのが最善でしょう.game.js内に呼び出すことができるリセット機能はありますか?


リセットがない場合は、javascript ファイルを再度実行するとうまくいく場合があります。

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = 'game.js';
$(document.head).append( script );

ゲームが適切に動作し、そのキャンバス内のもののみを操作する場合は、スクリプトをインポートする前に、Dom からキャンバスを削除して再作成することをお勧めします$('#gameWrapper').remove(); $(document.body).append('<div id="gameWrapper"></div>')。これにより、残っているイベント ハンドラーと DOM ジャンクの一部を取り除くことができます。

于 2012-10-18T23:36:02.120 に答える
0

このjQueryを使用してjsファイルを削除できます。

$j('script[src=game.js]').remove();

これをページの読み込みのみで試します。

于 2014-06-02T06:24:30.973 に答える