JQuery仅适用于警报

时间:2015-03-22 02:11:25

标签: javascript jquery

此代码仅适用于警报。删除警报后不会执行代码:

$(document).ready(function() {
  $('#topmenu').load('/include/topmenu.htm');
});

$(window).load(function() {
  var pagePath = window.location.pathname;
  var pageSplit = pagePath.split('/');
  var pageSection = pageSplit[1];
  alert('hi');

  $('#topmenu a').each(function() {
    var path = this.pathname;
    var section = path.split('/')[1];
    if (section == pageSection) {
      $(this).addClass('selected');
    }
  });
});
 <a href="/section1/index.asp">Section1</a>
<a href="/section2/index.asp">Section2</a>
<a href="/section3/index.asp">Section3</a>

似乎警报之后的代码仅在警报存在时识别pageSection值,否则,未定义该值。

在前一个pageSection代码之前执行的$('#topmenu a')选择器是否有足够的时间运行?处理这种情况的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您的菜单加载速度不够快。您应该将回调应用于load()

$(document).ready(function() {
  $('#topmenu').load('/include/topmenu.htm', function() {
    var pagePath = window.location.pathname;
    var pageSplit = pagePath.split('/');
    var pageSection = pageSplit[1];

    $('#topmenu a').each(function() {
      var path = this.pathname;
      var section = path.split('/')[1];
      if (section == pageSection) {
        $(this).addClass('selected');
      }
    });
  });
});