2013-08-20 34 views
2

我試圖從檢索變量,如果嵌套在一個jQuery .each函數聲明:如果從嵌套。每個函數語句檢索變量

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

[顯示您的代碼是工作(http://jsfiddle.net/EDBZ8/)。你的收音機有價值嗎? '#other-amount'是否存在?它是某種形式的元素嗎?它有價值嗎? –

+0

如果'radioAmount'是'undefined',那麼你還沒有向我們展示其他東西。可能性是'radioAmount'沒有被定義在足夠高的範圍內(在'.each()'回調之外),或者你正在做一些異步函數並期待'radioAmount'從中返回。此外,爲什麼使用'.each()'循環,如果你只需要一個'radioAmount'的值 - 這對我來說沒有意義,因爲它只能有一個值,但是你正在遍歷潛在的許多項目並重置價值一遍又一遍。如果你只想要一個值,然後選擇其中一個div – jfriend00

+0

其他可能性。 'input'沒有'value'屬性,或者$('#other-amount')'不存在或沒有值。 – jfriend00

回答

0

我會提出我的意見的答案,因爲猜測#低於5似乎已經解決了這個問題爲您:

沒有看到關於錯誤的頁面和更多細節,我只能猜測什麼東西可能導致你觀察到的東西。如果radioAmountundefined,那麼您還沒有向我們展示其他信息。可能性:

  1. radioAmount沒有在足夠高的範圍內定義(在.each()回調外)
  2. 你裏面的一些異步函數這樣做的,希望radioAmount要收到返回。可能input也沒有值屬性。
  3. 也許$('#other-amount')不存在。
  4. 也許$('#other-amount')沒有價值。

P.S.爲什麼使用.each()循環,如果你只是想爲radioAmount一個值 - 即沒有意義對我來說,因爲它只能有一個值,但你遍歷可能的許多項目,一遍又一遍重置價值。如果你只想要一個值,然後選擇的div

+0

謝謝@ jfriend00號碼5確實是問題。與變量範圍無關。 – gethyn1

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); 
+0

你不需要使用'filter'。只是'var checkedRadio = $('div.amount')。find('input [type =「radio」]:checked「);''甚至'var checkedRadio = $('div.amount input [type =」radio「 ]:checked「);' – RoToRa

+0

@RoToRa您的評論的第一種形式會更快,因爲選擇背後的嘶嘶聲的權利左移。 –

+0

@MarkSchultheiss正確。一般來說,我會避免在CSS(和jQuery)中的後代選擇器由於性能,並在可能的情況下使用子選擇器('>')。 – RoToRa

0
var radioToCheck =$('div.amount').find('input[type="radio"]:checked'); 
var radioAmount = radioToCheck.length ? radioToCheck.val() : $('#other-amount').val(); 

昇天$('#other-amount')現有的和是一個值的輸入類型之一。