Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何重新加载/替换外部javascript onclick?_Javascript_Jquery_Ajax - Fatal编程技术网

如何重新加载/替换外部javascript onclick?

如何重新加载/替换外部javascript onclick?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个jQuery游戏(简单的卡片记忆游戏),我从github获得 它没有“新建游戏”按钮,因此一旦游戏完成,就无法在不刷新页面的情况下重新启动游戏 我不想刷新整个页面,所以我尝试创建一个像这样的点击事件 <li style="color:black; font-weight:600"><a href="#">new game</a></li> $(document).ready(function() { $('a').click(fu

我有一个jQuery游戏(简单的卡片记忆游戏),我从github获得

它没有“新建游戏”按钮,因此一旦游戏完成,就无法在不刷新页面的情况下重新启动游戏

我不想刷新整个页面,所以我尝试创建一个像这样的点击事件

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

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

});          
  • $(文档).ready(函数(){ $('a')。单击(函数(){ $(“body”).load(“game.js”); }); });
    单击时,外部.js不会被替换

    我在谷歌上搜索过,但什么也没找到

    也许这是不可能的?我已经读到,一旦加载了.js,就无法使用.click删除该.js

    这是真的吗

    如果加载的.js无法替换,如何构建“新游戏”功能


    感谢您为我回答了这个简单但令人困惑的问题。

    看看
    jQuery.getScript()
    -url

    即使您再次获取并运行脚本,我猜您可能会因为全局变量或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)。附加(“”)
    。这将有助于清除一些剩余的事件处理程序和DOM垃圾。

    会有不良的副作用,变量仍然设置为其旧值,等等。重新加载脚本与刷新页面不同

    例如,如果您有一个变量
    currentScore
    ,该变量从0开始,然后在播放时升高,则重新加载脚本不一定会将其重置为0,它很可能仍然是51245,或者不管最后的分数是多少,基本上会把一切都搞糟。这也适用于无数其他事物。过去的间隔现在将加倍。事件将被再次添加,旧事件不会取消设置,双重调用所有事件。这一清单不胜枚举


    基本上,这个游戏似乎有穷人的架构和需要的工作,以正确地重置。当某些东西在逻辑和架构上有一个根本性的缺陷时,要想让它正常工作,往往不如快速修复那么简单。重新启动游戏等功能通常必须作为输入的第一行代码的一部分进行规划。

    您可以使用此jQuery删除js文件

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

    我仅在页面加载中尝试此操作。

    您不能添加自己的代码来重置一系列内容吗?我猜这并不理想,而且与你所问的问题无关。我想你可以一直这样做:
    .load(“game.js?=“+newdate().getTime())因为浏览器可能正在缓存游戏的内容。js我认为缓存可能与此无关。我正在尝试创建一个按钮,以便在游戏期间,如果玩家想要重新开始,游戏将重新加载。也许没有一个简单的解决办法。虽然很难相信没有。基本上,我尽量不使用刷新整个页面的“.reload”。没有想到仅仅刷新.js会是一个如此困难的挑战,但也许是这样?你能发布一个实时链接,或者至少是一个到github游戏的链接。@newbie\u coder也许你关于缓存的看法是对的,但这就是为什么我在评论中问/建议它的原因。您是否尝试使用我建议的额外GET参数来查看它是否与缓存有关?我知道你不想重新加载整个页面,我没有提到,没有。这是一个非常简单的游戏。没有这种复位功能。我只是想用它来学习jQuery,我想如果他们要“重新加载”脚本,他们需要先删除之前的脚本。我只是测试了一些类似于你所拥有的东西(我认为它可以做OP想要做的事情),但是变量的行为很奇怪。如果我在外部文件中声明了一个值为
    0
    的变量
    a
    ,然后在HTML文件中将其设置为like
    23
    ,使用您的代码(包括删除原始脚本块),并再次警告
    a
    ,它仍然是
    23
    。如果我在外部文件中警告
    a
    ,它会显示
    0
    。ianpgall:我刚刚测试过,我认为这是由于浏览器异步获取脚本造成的。如果执行了
    head.append(script)
    ,然后立即发出
    alert(a)
    ,则浏览器没有机会获取并执行脚本。尝试使用
    setTimeout(函数(){alert(a);},1000)给浏览器一秒钟来获取和执行脚本。我的问题不是如何在外部js中使用ajax。我的问题是如何在单击时删除/删除/替换已经加载的.js。卸载js并不那么容易:)js通常会附加事件处理程序,初始化变量等等。。。您可以删除JS,但已初始化的处理程序将保留。如果它是一个类并且有destroy方法,您可以调用它。。。在重新加载JS.Downvote之后,如果你想要,它不会改变事实,那就是事实,对不起!