为什么getColorOptionSelect()返回未定义的值(我确定它有调试器的值)。
肯定是与范围相关的问题,对不起我的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;
}
});
答案 0 :(得分:4)
getColorOptionSelect
没有(未注明的)return
声明。
您拥有的唯一return语句位于传递给each()
的匿名函数中。它将被each()
下面的代码使用(如果它是false
,它将停止循环)。
这不是范围问题,只是存在多个功能。
你可能想:
each()
getColorOptionSelect
答案 1 :(得分: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;
)
答案 2 :(得分: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
}
});