【问题标题】:How to load an external Javascript file during an "onclick" event?如何在“onclick”事件期间加载外部 Javascript 文件?
【发布时间】:2026-01-19 03:30:01
【问题描述】:

我的 HTML 中有 2 个 div。

<div id="div1"></div>
<div id="div2"></div>

单击“div2”时,我想加载一个外部 javascript 文件,例如“https://abcapis.com/sample.js”。

我尝试在 onclick 事件中包含 JS 文件,如下所示,

var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://abcapis.com/sample.js"; 
document.getElementsByTagName("head")[0].appendChild(script);

这包括 head 部分中的脚本标记,但没有加载,因为脚本标记将仅在页面加载时加载(如果我错了,请在此处纠正我)。

我还有其他方法可以继续吗?

提前致谢。

【问题讨论】:

  • 您确定您的代码正在运行吗?看起来它应该对我有用,并且在 Chrome 中对我来说非常好。

标签: javascript jquery html jsp dojo


【解决方案1】:

使用 jQuery 的 $.getScript() 函数应该可以为您完成这项工作。

这是一段示例代码:

$("button").click(function(){
  $.getScript("demo_ajax_script.js");
}); 

如果您不使用 jQuery,您将不得不学习如何使用 AJAX 将新脚本动态加载到您的页面中。

【讨论】:

    【解决方案2】:

    你在使用 jQuery 吗?如果有,你可以试试$.getScript()

    您可能还想查看此answer。但基本上,你可以这样做:

    <a href='linkhref.html' id='mylink'>click me</a>
    <script type="text/javascript">
        var myLink = document.getElementById('mylink');
    
        myLink.onclick = function(){
    
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.src = "Public/Scripts/filename.js."; 
            document.getElementsByTagName("head")[0].appendChild(script);
            return false;
        }
    </script>
    

    【讨论】:

      【解决方案3】:

      将此函数复制并粘贴到您的代码中。

      <script type="text/javascript">
       getScript=(url)=>{
           var script = document.createElement('script');
           script.setAttribute('type', 'text/javascript');
           script.setAttribute('src', url);
           if(document.body == null){
               document.head.appendChild(script);
           }else{
               document.body.appendChild(script);
           }
       }
      </script>
      

      现在用你的 .js 文件 url 调用这个函数。 示例:getScript('https://abcapis.com/sample.js');

      信息:

      • 文件不应包含DOMContentLoaded$(document).ready() 函数

      【讨论】:

        【解决方案4】:
        $("button").click(function(){
          $.getScript("demo_ajax_script.js");
        }); 
        

        我错过的一个信息是,路径必须是绝对的。

        【讨论】:

          【解决方案5】:

          您的代码几乎可以正常工作。您需要使用.setAttribute。这是我的工作代码。我使用 jQuery 作为我的脚本:

          var script = document.createElement('script');
          script.setAttribute('type', 'text/javascript');
          script.setAttribute('src', 'jquery.min.js');
          document.head.appendChild(script);
          

          这样就可以了。

          编辑:

          更多信息。当您执行script.type = 'text/javascript' 之类的操作时,您正在为对象设置一个属性,但这不一定与将该属性与实际节点属性相关联的事情相同。

          【讨论】:

          • "text/javascript" 在脚本中不再需要,建议删除类型
          • @沙真。我只在此处包含它,因为它是原始问题的一部分。
          最近更新 更多