我试图从嵌套在jquery .each
函数中的if语句中检索变量:
var radioAmount;
$('div.amount').each(function() {
var input = $(this).find('input[type="radio"]');
if(input.is(':checked')) {
radioAmount = input.attr('value');
} else {
radioAmount = $('#other-amount').val();
}
});
console.log(radioAmount);
我希望radioAmount
将输入值返回到.each
函数之外,但它返回undefined。
我确信这应该是相当直接的,并且与变量范围有关但我无法弄清楚我做错了什么。
或许这完全是错误的做法。
答案 0 :(得分:1)
这里的问题不是变量范围,而是$('#other-amount')
未定义。
我错过了这个,因为我认为如果检查无线电输入并不重要。
正如评论中所建议的那样,我在没有.each()
的情况下重写了这个:
var radioAmount;
var checkedRadio = $('div.amount').find('input[type="radio"]:checked');
if(checkedRadio.length) {
radioAmount = checkedRadio.attr('value');
} else {
radioAmount = $('#other-amount').val();
}
console.log(radioAmount);
答案 1 :(得分:0)
我会将我的评论移到答案,因为下面的#5猜测似乎已经为你解决了这个问题:
如果没有看到页面以及有关错误的更多细节,我只能猜测可能导致您观察到的内容。如果radioAmount
是undefined
,那么还有其他事情你没有向我们展示。可能性是:
radioAmount
未定义在足够高的范围内(.each()
回调之外)radioAmount
从中返回。 input
没有值属性。$('#other-amount')
不存在。$('#other-amount')
没有价值。 P.S。如果你只想要.each()
的一个值,为什么要使用radioAmount
循环 - 这对我来说没有意义,因为它只能有一个值,但你正在迭代可能很多项并重置价值一遍又一遍。如果您只想要一个值,那么选择一个div
答案 2 :(得分:0)
var radioToCheck =$('div.amount').find('input[type="radio"]:checked');
var radioAmount = radioToCheck.length ? radioToCheck.val() : $('#other-amount').val();
假设存在$('#other-amount')
并且具有值的输入类型。