Javascript 使用jquery单击事件触发.js文件

Javascript 使用jquery单击事件触发.js文件,javascript,jquery,Javascript,Jquery,我正在尝试加载jquery单击事件后在线托管的.js文件。首先,我这样做对吗?是否只有在单击链接后才能应用所有javascript $(document).ready(function() { var clickHandler ="file.js"; $('a').click(function() { $.getScript(clickHandler, function(data, textStatus, jqxhr) { cons

我正在尝试加载jquery单击事件后在线托管的.js文件。首先,我这样做对吗?是否只有在单击链接后才能应用所有javascript

$(document).ready(function() {
            var clickHandler ="file.js";
    $('a').click(function() {
        $.getScript(clickHandler, function(data, textStatus, jqxhr) {
        console.log(data);
        console.log(textStatus);
        console.log(jqxhr.status);
    });
});

编辑:我刚刚检查了控制台,它正在加载文件,但给了我403禁止信息。为什么会这样?是否需要在标题中包含一些文本以供参考?

传递给click()的函数是回调函数,仅在单击元素时执行。所以,是的,你把那部分做对了。

编辑1:

误读jQuery代码——这部分答案不适用:

有多种方法可以将Javascript文件添加到现有文档中,但它并不像您尝试的那样简单

这一讨论可以解释如下:

另一种解决方案是将Javascript的内容放入自己的函数中,通常将其包含在页面上,然后在
单击
处理程序中运行该函数

编辑:扩展答案

假设您的
文件.js中有一些相当简单的代码,如下所示:

var el = document.getElementById("fooz");
if (el) {
  el.className += " example";
}
function colorFooz() {
  var el = document.getElementById("fooz");
  if (el) {
    el.className += " example";
  }
}
由于该代码未封装在函数中,因此它将在加载后立即运行(或尝试运行)。每次加载时,它只运行一次

但是,如果将其封装在函数中,如下所示:

var el = document.getElementById("fooz");
if (el) {
  el.className += " example";
}
function colorFooz() {
  var el = document.getElementById("fooz");
  if (el) {
    el.className += " example";
  }
}
然后,在调用函数之前,代码将不会运行。它将加载并准备稍后调用

错误403

首先要做的是弄清楚为什么会出现
错误403

在这个阶段,这与
Javascript
jQuery
AJAX
无关。通过尝试直接在浏览器中加载该Javascript文件,通过键入类似以下内容来解决问题:utnil your URL:

http://example.com/file.js
当然,将URL更改为您的网站和路径。此时,您应该仍然会收到
403
错误,但现在您可以检查服务器日志,查看其中写入了什么错误

我在这里找到了一个页面,提供了跟踪403个错误的指南:


((注:如果我不得不随机猜测您出现403错误的原因,我会说您的路径文件
file.js
不正确。根据您的结构和各种包含,它可能计算不正确的相对路径。)

为什么需要基于事件加载JS文件,而不是在初始加载时加载?我使用ajax加载页面的一部分,javascript不会应用于该部分,因为它是在javascript文件加载完成后加载的,我只是不明白为什么不能提前预加载脚本…然后在需要时调用外部文件中的函数(位于单击事件处理程序中。为什么会发生这种情况?我们无法告诉您,因为HTTP状态来自服务器,但您已发布客户端代码。当您尝试直接在浏览器中加载文件时会发生什么情况?检查您是否已为该.js文件授予了正确的文件权限Jeremy您可以详细介绍第二种解决方案吗?我还在学习,不知道该怎么做。对于第一种方法,我不是在做与第一个答案相同的事情吗?@Andrew——这就是你试图做的,但它不像你尝试过的那样工作。链接解释了更多。至于澄清第二种方法,请给我几分钟时间。+1因为需要找出403错误的原因首先,Jeremy,感谢您的详细回复。我要加载的文件是一个jquery插件。如果我只是简单地将url添加到标题中,它对主要内容的执行效果很好,而不是我要用ajax加载的HTML。我可以将整个插件放入一个函数中吗?