javascript - 谜团 "TypeError: navWrap.offset() is undefined"

标签 javascript jquery wordpress undefined

我完全被这个问题困扰了,有人知道这个问题可能是什么吗?

我想要在自定义 js 文件(在 Wordpress 中)中添加的代码是:

var navWrap = jQuery('#sidebarnavWrap'),
    nav = jQuery('#sidebarnav'),
    startPosition = navWrap.offset().top,
    stopPosition = jQuery('#footer-three').offset().top - nav.outerHeight();

jQuery(document).scroll(function () {
//stick nav to top of page
var y = jQuery(this).scrollTop()

  if (y > startPosition) {
      nav.addClass('sticky');
      if (y > stopPosition) {
          nav.css('top', stopPosition - y);
      } else {
          nav.css('top', 0);
      }
  } else {
    nav.removeClass('sticky');
} 
});

这段代码在 jsfiddle 中完美运行。然而,当在我的 WordPress 网站上使用时,控制台提到“TypeError: navWrap.offset(...) is undefined

http://jsfiddle.net/ykto7uu9/42/

各位专业人士知道是什么原因造成的吗? 非常感谢。

额外信息:我的自定义 js 文件已经包含一个非常简单的工作 jQuery 代码来显示/隐藏文本(无冲突),并且我使用以下方法将脚本排入了functions.php中:

function my_javascripts() {
wp_enqueue_script( 'js.custom', '/wp-content/themes/mytheme-child/js/js.custom.js', array() );
}
add_action( 'wp_enqueue_scripts', 'my_javascripts', 1000 );

最佳答案

您正在页面头部加载 JS,并且没有等待就绪回调。代码触发时没有 sidebarnavWrap 元素。

将整个 JS 代码块包装在:

jQuery(document).ready(function() {

    // CODE HERE

});

我还建议对您的入队脚本调用进行一些调整。

  1. 您正在使用 jQuery,因此将其定义为依赖项
  2. 将脚本移至页脚

更新版本:

wp_enqueue_script( 'js.custom', '/wp-content/themes/mytheme-child/js/js.custom.js', array( 'jquery' ), false, true );

https://developer.wordpress.org/reference/functions/wp_enqueue_script/

关于javascript - 谜团 "TypeError: navWrap.offset() is undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41417347/

相关文章:

javascript - 如何在没有本地主机的情况下调用 URL?

javascript - 根据 url 参数提供压缩与未压缩的 js 和 css 文件 - AngularJs,Grunt

javascript - 将参数从 javascript 传递到另一个 jsp

jquery - 验证 MVC 表单中的复选框

wordpress - WordPress 下拉菜单是否始终默认为不隐藏?

wordpress - 为二十十二主题添加丝带包装

javascript - 手机无法点击菜单按钮

javascript - 如何在 Github Issue on create (API) 上发表评论

javascript - 文本超出列宽

Yoast 的 WordPress SEO 更改站点地图 xml url