2

我正在尝试从嵌套在 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,但它返回未定义。

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

或者也许这完全是错误的方法。

4

3 回答 3

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);
于 2013-08-20T10:32:54.297 回答
0
var radioToCheck =$('div.amount').find('input[type="radio"]:checked');
var radioAmount = radioToCheck.length ? radioToCheck.val() : $('#other-amount').val();

假设$('#other-amount')存在并且是具有值的输入类型。

于 2013-08-20T22:46:03.833 回答
0

我会将我的评论移至答案,因为下面的猜测 #5 似乎已经为您解决了这个问题:

在没有看到页面和有关错误的更多细节的情况下,我只能猜测可能导致您观察到的事情的原因。如果radioAmountundefined,那么还有其他事情发生,您没有向我们展示。可能性是:

  1. radioAmount没有在足够高的范围内定义(在.each()回调之外)
  2. 您在某个异步函数中执行此操作并期望radioAmount从中返回。
  3. 也许input没有价值属性。
  4. 也许$('#other-amount')不存在。
  5. 也许$('#other-amount')没有价值。

.each()PS如果您只想要一个值,为什么要使用循环radioAmount- 这对我来说没有意义,因为它只能有一个值,但是您正在迭代可能的许多项目并一遍又一遍地重置值。如果您只想要一个值,请选择其中一个 div

于 2013-08-20T22:30:16.707 回答