关于html:如何在带有JavaScript代码的if条件中使用函数方法?

How can I have a function method in an if condition with JavaScript code?

我想在我的JavaScript代码中给出条件方法。 此代码在Internet Explorer 10版本中不起作用。 当我在JavaScript验证器中粘贴此代码时,会显示以下消息:

Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function.

我怎么能在这里有功能?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            if(jQuery("header").attr("id") =="header-style-two")
        {
                    function sticky_relocate() {
                        var window_top = jQuery(window).scrollTop();
                        var div_top = jQuery('#sticky-anchor').offset().top;
                        if (window_top > div_top) {
                            jQuery('.mainmenu-area').removeClass('light-menu');
                            //This is for when div in top        
                        } else {
                            jQuery('.mainmenu-area').addClass('light-menu');
                            //This is for when div in not top
                        }
                    }

                    jQuery(function () {
                        jQuery(window).scroll(sticky_relocate);
                        sticky_relocate();
                    });
        }


你不能在if块中使用命名函数(它不符合规范并且提升会使它相当混乱,但是一些JavaScript引擎可能会尝试补偿不良代码,这就是它可能在某些浏览器中工作的原因) ,但您可以将函数分配给if块中的变量。

而不是:

1
function sticky_relocate() {

你可以这样做:

1
var sticky_relocate = function() {

所以这样的事情会起到作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(jQuery("header").attr("id") =="header-style-two")
{
    var sticky_relocate = function() {
        var window_top = jQuery(window).scrollTop();
        var div_top = jQuery('#sticky-anchor').offset().top;
        if (window_top > div_top) {
            jQuery('.mainmenu-area').removeClass('light-menu');
            //This is for when div in top        
        } else {
            jQuery('.mainmenu-area').addClass('light-menu');
            //This is for when div in not top
        }
    }

    jQuery(function () {
        jQuery(window).scroll(sticky_relocate);
        sticky_relocate();
    });
}


JSHint正在给你一个警告,这意味着,"我们认为这不是最好的主意,但我们会允许你这样做。"

您可以通过几种方式更改代码。

将函数声明更改为函数表达式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(jQuery("header").attr("id") =="header-style-two") {
  var sticky_relocate = function() {
    var window_top = jQuery(window).scrollTop();
    var div_top = jQuery('#sticky-anchor').offset().top;
    if (window_top > div_top) {
      jQuery('.mainmenu-area').removeClass('light-menu');
      //This is for when div in top        
    } else {
      jQuery('.mainmenu-area').addClass('light-menu');
      //This is for when div in not top
    }
  }
  jQuery(function () {
    jQuery(window).scroll(sticky_relocate);
    sticky_relocate();
  });
}

或者将函数定义移出if块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(jQuery("header").attr("id") =="header-style-two") {
  jQuery(function () {
    jQuery(window).scroll(sticky_relocate);
    sticky_relocate();
  });
}

function sticky_relocate() {
  var window_top = jQuery(window).scrollTop();
  var div_top = jQuery('#sticky-anchor').offset().top;
  if (window_top > div_top) {
    jQuery('.mainmenu-area').removeClass('light-menu');
    //This is for when div in top        
  } else {
    jQuery('.mainmenu-area').addClass('light-menu');
    //This is for when div in not top
  }
}


在if条件下你不能有函数声明。 您可以将它放在外面并根据条件调用它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var isHeaderStyleTwo = (jQuery("header").attr("id") =="header-style-two");
function sticky_relocate() {
  var window_top = jQuery(window).scrollTop();
  var div_top = jQuery('#sticky-anchor').offset().top;
  if (window_top > div_top) {
    jQuery('.mainmenu-area').removeClass('light-menu');
    //This is for when div in top        
  } else {
    jQuery('.mainmenu-area').addClass('light-menu');
    //This is for when div in not top
  }
}

jQuery(function () {
  if (isHeaderStyleTwo) {
      jQuery(window).scroll(sticky_relocate);
        sticky_relocate();
  }