如果放在文件顶部,javascript 代码不起作用

标签 javascript html

我有以下代码。在搜索结果页面滚动到某一点后,在窗口的固定位置设置一个过滤栏:

var docked;
var filters = document.getElementById('filters');
var init = filters.offsetTop;

function scrollTop() {
  return document.body.scrollTop || document.documentElement.scrollTop;
}

window.onscroll = function () {
  if (!docked && (init - scrollTop() < 0)) {
    filters.style.top = 0;
    filters.style.position = 'fixed'; 
    filters.className = 'docked'; 
    docked = true;
  } else if (docked && scrollTop() <= init) { 
    filters.style.position = 'absolute'; 
    filters.style.top = init + 'px';
    filters.className = filters.className.replace('docked', ''); 
    docked = false;  
  }
}

我的问题是(而且它更令人好奇)- 如果我将这段代码放在我的文件的顶部(在 <head> 中),它根本不起作用。过滤器部分不会像它应该的那样随窗口滚动。但是,当我将此代码放在文件底部时(就在结束 </body> 标记上方),它工作得很好。

这是为什么?这与代码的工作方式有关吗?或者这可能只是我文件其余部分的一个怪癖或错误导致的?

最佳答案

将您的作业包装在 window.onload = function(){/* 此处为您的代码 */}; 它将运行。原因是您对 var filters = document.getElementById('filters'); 的分配返回为未定义,因为该元素在您引用它时页面加载期间不存在。

例子:

var docked;
var filters;
var init;
window.onload = function(){
 filters = document.getElementById('filters');
 init = filters.offsetTop;
};

关于如果放在文件顶部,javascript 代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15556716/

相关文章:

javascript - 检测我网站上的广告拦截然后显示横幅?

javascript - 将元数据 (Exif) 添加到 base64

html - Bootstrap 动态调整行高

JavaScript 冲突导致页面无法正确显示

javascript - Odoo 数据透视报告错误值被转换为 "Undefined"

javascript - 选择 onclick 样式化元素

javascript - jquery的自动完成功能中出现错误 "this.source is not a function."

html - 按钮上的 Font-Awesome 图标不会垂直对齐

html - 使用 Bootstrap dropdown-toggle 填充 100% 宽度

html - html文本的最佳实践