2013-01-21 87 views
1

为什么getColorOptionSelect()返回未定义的值(我确定它有一个调试器的值)。jquery .each() - 返回值undefined

这是肯定的有关范围的问题,对不起我的无知JS

jQuery(document).ready(function() { 

    colorSelectID = getColorOptionSelect(); 
    alert(colorSelectID); 

    function getColorOptionSelect() { 

     // get label 
     var selId; 
     jQuery(".product-options dl label").each(function() { 
      el = jQuery(this); 
      // lower case, remove * 
      var labelText = el.text().toLowerCase().replace("*", ""); 
      if (labelText == 'color') { 
       //return element 
       selId = el.parent().next().find("select").attr('id'); 
       return selId; 
      } 
     }); 
     // return null; 
    } 

}); 

回答

4

getColorOptionSelect没有一个(未注释)return声明。

您拥有的唯一返回声明是在您传递给each()的匿名函数中。它将被底层代码each()消耗(如果它是false,将停止循环)。

这不是范围问题,只是存在多个功能。

你可能想:

  • 定义一个变量,你叫each()
  • 一个值分配给它的每个循环中
  • 返回之前在getColorOptionSelect
2
结束变量

你应该这样做:

function getColorOptionSelect() { 

     // get label 
     var selId; 
     jQuery(".product-options dl label").each(function() { 
      el = jQuery(this); 
      // lower case, remove * 
      var labelText = el.text().toLowerCase().replace("*", ""); 
      if (labelText == 'color') { 
       //return element 
       selId = el.parent().next().find("select").attr('id'); 
       return false; // to stop further execution of each 
      } 
     }); 
     return selId; 
    } 

在你的情况,你正在做的回调函数传递给每个和它不会从getColorOptionSelect

你可以做从每个回调函数返回值的唯一的事情就是告诉jQuery的,如果它应该去通过回归下一个项目(return true;)否(return false;

+0

谢谢你,这是工作的罚款 – WonderLand

1

取消对最后return语句retun值(类似selId

jQuery(document).ready(function() { 

colorSelectID = getColorOptionSelect(); 
alert(colorSelectID); 

function getColorOptionSelect() { 

    // get label 
    var selId; 
    jQuery(".product-options dl label").each(function() { 
     el = jQuery(this); 
     // lower case, remove * 
     var labelText = el.text().toLowerCase().replace("*", ""); 
     if (labelText == 'color') { 
      //return element 
      selId = el.parent().next().find("select").attr('id'); 
      return false; //<--- return false to stop further propagation of each 
     } 
    }); 
     return selId; //<--- Must return something 
} 

}); 
+0

每个都不支持像那样的返回,因此是错误。退出每个它需要返回false。 – epascarello