2012-10-18 54 views
2

我有一個jQuery遊戲(簡單卡記憶遊戲),我從github獲得。如何重新加載/替換外部javascript onclick?

它沒有「新遊戲」按鈕,所以一旦遊戲結束,沒有刷新頁面的情況下無法重新啓動遊戲。

我不想刷新整個頁面,所以我嘗試創建一個像這樣的點擊事件。

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

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

});   

單擊時,外部.js不會被替換。

我已經使用Google搜索,但沒有找到任何東西。

也許這是不可能的?我讀過一次.js加載後,沒有辦法使用.click刪除.js。

這是真的嗎?

如果加載的.js不能替換,我該如何構建「新遊戲」功能?

感謝您回答這個簡單而又令人困惑的問題(對我這樣的新手感到困惑)。

+1

難道你不能添加自己的代碼重置一堆東西嗎?我猜這並不理想,而且與你所問的問題無關。我猜你總是可以這樣做:'.load(「game.js?_ =」+ new Date()。getTime());'因爲瀏覽器可能會緩存game.js的內容 – Ian

+0

也許高速緩存沒有任何關係機智,我不認爲。我正在嘗試創建一個按鈕,以便在遊戲過程中,如果該人想重新啓動,遊戲將被加載新鮮。 也許這不是一個簡單的解決方案。雖然很難相信沒有一個。 基本上,我試圖不使用刷新整個頁面的「.reload」。沒想到刷新.js會是如此困難的挑戰,但也許它是? –

+0

你可以發佈一個實時鏈接,或至少一個鏈接到github遊戲.. –

回答

0

jQuery.getScript() - jQuery.getScript()網址

+0

我的問題不是如何在外部js中使用ajax。我的問題是如何刪除/刪除/替換已經加載的.js點擊。 –

+0

不容易卸載JS :) js通常附加事件處理程序,初始化變量等...您可以刪除JS,但已經初始化的處理程序將保留。如果它是一個類並且具有銷燬方法,則可以調用它...而且重新加載JS。 – Reflective

0

即使你獲取和運行該腳本再次我猜你可能必須從留在DOM全局​​變量或垃圾一些怪異的揮之不去的副作用。最好讓腳本自己清理一下,game.js中是否有某種可以調用的重置函數?


如果沒有復位,然後再次運行JavaScript文件可以做的伎倆:

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

如果遊戲性能良好,並且只有它的畫面內操縱的東西,你可能想嘗試刪除在導入腳本之前重新創建它的畫布:$('#gameWrapper').remove(); $(document.body).append('<div id="gameWrapper"></div>')。這將有助於清除一些殘留事件處理程序和DOM垃圾。

+0

不是。這是一個非常簡單的遊戲。沒有這樣的重置功能。我只是想用它學習jQuery。 –

+0

我想如果他們要「重新加載」腳本,他們需要先刪除以前的腳本。我只是測試了你所擁有的東西(這是我認爲可以做OP所需要的東西),但變量卻很奇怪。如果我在外部文件中聲明一個值爲'0'的變量'a',然後在我的HTML文件中將它設置爲''23',使用您的代碼(包括刪除原始腳本塊),並提示'a'再次,它仍然是'23'。如果我在外部文件中提醒'a',它會顯示'0'。 – Ian

+0

ianpgall:我剛剛測試過,我認爲這是由於瀏覽器異步獲取腳本。如果你做'head.append(script)',然後立即'alert(a)',瀏覽器就沒有機會獲取和執行腳本。嘗試使用'setTimeout(function(){alert(a);},1000);'讓瀏覽器獲取並執行腳本。 –

1

會有不良的副作用,變量仍舊設置爲舊值等。重新加載腳本與刷新頁面不一樣。

例如,如果你有一個變量currentScore,它從0開始,然後在你玩時提高,重新加載腳本不一定會將它重置爲0,它可能仍然是51245或最後得分,基本上搞亂了一切。這也適用於其他許多事情。現在的時間間隔現在會翻倍。事件會再次被添加,而舊事件不會被解除,雙重調用一切。該名單繼續下去。

基本上這個遊戲似乎有差的架構,需要工作才能正確重置。當某些東西在邏輯和體系結構上存在根本性缺陷時,通常不會像快速修復那樣簡單。重新啓動遊戲等功能通常必須作爲第一行代碼類型編碼的一部分進行規劃。

+0

將所有你想要的都放下來,它並不會改變事實,它是真相,對不起! –

0

您可以使用此jQuery刪除js文件。

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

我只在頁面加載時嘗試此操作。

相關問題