2013-07-17 38 views
1

的Javascript返回錯誤輸出

z = selected_sheet() 

回報

5 
undefined 

...

ž

回報

undefined 

JavaScript代碼

function selected_sheet(){ 
     $('.sheet_radio').each(function(){ 
      if (this.checked == true){ 
       var x = 5; 
       console.log(x); 
       return x; 
      }; 
     }); 
    }; 

所以我從控制檯登錄正確的輸出,但z不被置到從返回的console.log同一項目。

+2

記得在發帖時提問。 –

+0

那麼''each'裏的'console.log'成功返回'5'? – Shawn31313

回答

1

這是因爲一次只能選擇一個單選按鈕。我會在一分鐘內擴展。

因此,這裏是你的代碼:

function selected_sheet(){ 
     $('.sheet_radio').each(function(){ 
      if (this.checked == true){ `Entry Point` 
       var x = 5; 
       console.log(x); 
       return x; 
      }; 
     }); 
    }; 

如果單選按鈕被選中控制進入if條件Entry Point,因此你得到的輸出五,

但是,如果單選按鈕未選中,控件不會通過Entry Point,因爲if條件失敗並且函數返回undefined。

讓我知道如果您有任何問題。

+0

@ user2434674這是否回答你的問題? – user2580076

+0

謝謝,很好的解釋。 – user2434674

+0

歡迎您:) – user2580076

1

問題

這是因爲由。每個執行的功能只從該函數的範圍返回。它不從selected_sheet返回。

事實上,如果你明確地使傳遞到每個顯式的函數返回一個值,你會發現,z爲實際從未設置:

function selected_sheet() { 

    $('.sheet_radio').each(function() { 
     return 5; 
    }); 
    // nothing is actually being returned 

}; 

z = selected_sheet(); // z is undefined 

解決方案

一種解決方案是設置默認x值在外部示波器(或保留它未定義),然後將x的值設置爲新值(如果單選按鈕被選中)

function selected_sheet() { 

    var x = 7; // set default to 7 


    $('.sheet_radio').each(function() { 

     if (this.checked == true) { 
      x = 5; // set to new value 
      console.log(x); 
      return false; // stop iterating 
     } 

    }); 

    return x; 
}; 

另一種方法是查詢與選擇,看看是否有被檢查單選按鈕:

function selected_sheet() { 
    if($('.sheet_radio:checked').length > 0) { 
     return 5; 
    } else { 
     return 7; // this is the default if nothing is checked 
    } 
} 

最後這裏是一個純JavaScript解決方案:

function selected_sheet() { 
    if(document.querySelector('.sheet_radio:checked') !== null) { 
     return 5; 
    } else { 
     return 7; // this is the default if nothing is checked 
    } 
} 

和簡潔版本

function selected_sheet() { 
    return document.querySelector('.sheet_radio:checked') !== null? 5 : 7; 
}