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(); }); } |
或者将函数定义移出
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(); } |