从嵌套在.each函数中的if语句中检索变量

时间:2013-08-20 10:01:54

标签: jquery

我试图从嵌套在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。

我确信这应该是相当直接的,并且与变量范围有关但我无法弄清楚我做错了什么。

或许这完全是错误的做法。

3 个答案:

答案 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猜测似乎已经为你解决了这个问题:

如果没有看到页面以及有关错误的更多细节,我只能猜测可能导致您观察到的内容。如果radioAmountundefined,那么还有其他事情你没有向我们展示。可能性是:

  1. radioAmount未定义在足够高的范围内(.each()回调之外)
  2. 你在一些异步函数中执行此操作并期望radioAmount从中返回。
  3. 也许input没有值属性。
  4. 也许$('#other-amount')不存在。
  5. 也许$('#other-amount')没有价值。
  6. 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')并且具有值的输入类型。