1

我一直在开发我的脚本,现在想开始将它们移动到一个 js 文件中。但是,我要移动的第一个脚本在 js 文件中不起作用。

function listEvents(url, phash) {
    var hashlocation = phash.split('#')[1];
    if (hashlocation === undefined) {
        var page = '';
    } else {
        var page = hashlocation;
    }
    $('#events').empty().load(url + page);
} 

像这样从页面调用;

$(window).load(function() {
    listEvents('<? echo base_url(); ?>ajax/events_ajax/',window.location.hash);
});

在任何人询问之前,在头部的 jquery 库之后加载 js 文件。我已经清除了缓存,将 cloudflare 置于开发模式等,如果我在浏览器中加载 JS 文件,我会看到我的功能。我在控制台中没有看到任何错误。我错过了什么?

4

2 回答 2

1

我想您需要将代码放入.ready函数中:

$(document).ready(function() {
   $(window).load(function() {
      listEvents('<? echo base_url(); ?>ajax/events_ajax/',window.location.hash);
   });
});


解释:

问题是,当您触发代码时,内容尚未完全加载,在您的情况下,我认为是#events. 它还没有出现在DOM上,因此被 jQuery 忽略了。如果你在 HTML 文件中运行它,就像你把你的代码放在下面<div id="events"></div>(或者你的容器是什么),因为它是在之后执行的,所以找到了那个元素并且你的代码以预期的方式工作!

阅读有关jQuery .ready() 函数的更多信息

  • .ready() function:指定当DOM完全加载时要执行的函数。
于 2013-10-13T12:40:30.153 回答
0

我的猜测是您的嵌入式 PHP <? echo base_url(); ?>

listEvents('<? echo base_url(); ?>ajax/events_ajax/',window.location.hash);

在浏览器的开发工具中检查您的网络面板,而不仅仅是控制台。看看你是否看到任何 404。

如果您使用的是内联脚本,那么这些是 PHP,但是在移动到一个.js文件之后,这些文件不再由 PHP 处理。

于 2013-10-13T12:40:57.230 回答