1

为什么 getColorOptionSelect() 返回未定义的值(我确定它有 debugger 的值)。

这肯定是与范围有关的问题,对不起我的 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

3 回答 3

4

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

您拥有的唯一 return 语句是在您传递给的匿名函数中each()。它将被底层代码使用each()(如果是,它将停止循环false)。

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

您可能想要:

  • 在调用之前定义一个变量each()
  • 在每个循环内为其赋值
  • 在结束时返回该变量getColorOptionSelect
于 2013-01-21T14:57:00.820 回答
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;)

于 2013-01-21T14:58:28.517 回答
2

取消注释最后一条return语句以重新调整值(类似于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 
}

});
于 2013-01-21T14:58:36.007 回答