【问题标题】:If variable = number, do X, else do nothing如果变量=数字,做X,否则什么都不做
【发布时间】:2012-02-15 21:40:33
【问题描述】:

我编写了一个 jquery 代码,它将在悬停时扩展某些元素。我希望代码仅在未扩展时才扩展。这是我的代码。它似乎无法正常工作。

$(document).ready(function() {
    var labelstatus = 0;
});
$(document).ready(function() {
    $("a.rm").hover(function () {
        if (labelstatus != 1){
            $("#expensereduction,#envimpact,#mtextlft,#initaud,#energaud").fadeOut();
            var currentFontSize = $('.initiate').css('font-size');
            var currentFontSizeNum = parseFloat(currentFontSize, 10);
            var newFontSize = currentFontSizeNum*3;
            $('.initiate').delay(500).animate({
                fontSize: newFontSize
            });
            return false;
            var labelstatus = 1;
        }
        else {
        }
    });
});

【问题讨论】:

  • “无法正常工作”是什么意思?它在做什么不正确?
  • 为什么是两个 $(document).ready(function() ?

标签: jquery if-statement expand var


【解决方案1】:

这...

    return false;
    var labelstatus = 1;

应该是……

    labelstatus = 1;
    return false;

...还有这个...

$(document).ready(function() {
    var labelstatus = 0;
});

应该是……

var labelstatus = 0;

  • return 语句之后的代码将不会运行

  • 使用var 使labelstatus 成为函数的局部变量

  • 你真的不需要两个$(document).ready(function() { 调用。将您的代码合二为一,您可以将 labelstatus 设置为该处理程序的本地,以便内部的所有代码都可以使用它。

【讨论】:

    【解决方案2】:

    您在函数内部声明局部变量,因此它们彼此独立。此外,您每次都会获得一个新变量,因此之前的值不会持续存在。

    另外,您在分配变量之前调用return,这将退出函数,因此永远不会发生分配。

    您需要在函数之外的范围内声明变量:

    $(document).ready(function() {
    
      var labelstatus = 0;
    
      $("a.rm").hover(function () {
        if (labelstatus != 1){
          $("#expensereduction,#envimpact,#mtextlft,#initaud,#energaud").fadeOut();
            var currentFontSize = $('.initiate').css('font-size');
            var currentFontSizeNum = parseFloat(currentFontSize);
            var newFontSize = currentFontSizeNum * 3;
            $('.initiate').delay(500).animate({
                fontSize: newFontSize
            });
            labelstatus = 1;
            return false;
        }
        else {
        }
      });
    
    });
    

    另外:parseFloat 函数没有基数参数。

    【讨论】:

    • 太棒了。感谢您的解释。不知道 var 只定义了局部变量。谢谢!
    • @dylfreak6494:var 关键字用于声明所有变量。如果在函数内部使用,它将声明一个局部变量,如果在全局范围内使用,它将创建一个全局变量。如果你使用一个变量而不声明它,它将在全局范围内隐式声明。
    【解决方案3】:

    labelstatus 不会设置为 1,因为该函数已在之前的行中返回。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 2023-01-30
      • 2015-02-02
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      相关资源
      最近更新 更多