【问题标题】:Should raw javascript be in a .js file - How to include?原始 javascript 是否应该在 .js 文件中 - 如何包含?
【发布时间】:2012-12-19 07:25:20
【问题描述】:

假设我有如下页面

<html><head></head><body><!--STUFF-->
   <script>
       if(SomeBooleanVariable) {
           $.getScript('js/file.js');
       }
    </script>
 </body></html>

我的 file.js 文件只包含没有包装的原始 jQuery 事件。具体如下:

 $(document).on("eventHere", "classHere", function(e) {
   //Stuff
 });


 $(document).on("eventHere", "classHere", function(e) {
   //Stuff
 });

这根本行不通。当我将 file.js 的内容直接包含到 HTML 中时,它可以正常工作,但是 JS 似乎没有正确包含。我试过把“alert(3);”在 file.js 的顶部,但它不会触发。我尝试了以下方法:

 $("head").append("<script src=\"js/file.js\" />");
 $(document).append("<script src=\"js/file.js\" />");
 -and-
 document.write("<script src=\"js/file.js\" />");

【问题讨论】:

  • 尝试在if 中的$.getScript 之前添加警报?您是否在服务器日志中看到file.js 被请求?
  • 听起来像 eval() 会起作用,但 eval 是邪恶的,所以我有点困惑。
  • 在 chrome 中按 F12 选择网络菜单并查看 file.js 是否加载没有任何错误。
  • 在什么浏览器上什么操作系统没有这个功能?在我看来,您上面包含的代码与您的文件中的代码完全相同,但是当我尝试使用最新版本的 jQuery (1.8.3) 和一个仅包含警告语句的外部 JavaScript 文件,它工作得非常好。请详细说明您的代码的细节。
  • 如果 jQuery 包含在此脚本之前的页面某处,您的代码应该按原样工作。确保 .js 文件的路径正确。

标签: javascript jquery include external


【解决方案1】:

如果您想动态加载该 .js 文件,请将您的代码更改为:

if(SomeBooleanVariable) {
    $.getScript("ajax/test.js")
    .done(function(script, textStatus) {
        console.log(textStatus);
    })
    .fail(function(jqxhr, settings, exception) {
        console.log("Triggered ajaxError handler.");
    });  

看看你是否在控制台中遇到任何错误

例如,您可能正在使用 mod_rewrite 并且 jQuery 尝试加载相对于您的子页面所在的“文件夹”的脚本。例如:您是 @http://www.example.com/link-to-subpage/。在这种情况下,jQuery 将尝试加载http://www.example.com/link-to-subpage/js/file.js,而它驻留在@http://www.example.com/js/file.js。在这种情况下,请使用绝对路径。所以,而不是:

js/file.js

写:

/js/file.js

【讨论】:

  • 您不想在不需要时加载文件。不好的做法。
  • 取决于该文件的大小。仅包含几行的文件不会增加大量开销,并且 OP 没有显示真实代码。
  • 此解决方案需要手动更改一百万个 html 文件。根本不可行。
  • 对不起,这是我的错误。我的 file.js 实际上包含一个错误。我正在使用 $("head").append("js/file.js");。你的方法在技术上也有效。您可以获得代表和赞成票。谢谢!
猜你喜欢
  • 2013-03-18
  • 1970-01-01
  • 2021-06-19
  • 2021-08-29
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多