2012-12-05 58 views
0

爲什麼這個條件總是執行ELSE而不是IF分支。這裏的JavaScript:Javascript不執行分支IF語句

$(document).ready(function(){ 

if (document.getElementById("analyses").value == 'distance'){ 

loadScript('/static/distance.js', function() 
{ 
    console.log('done loading'); 
    }); 
}else{ 
loadScript('/static/geoClusters.js', function() 
{ 
console.log('done loading'); 
}); 
} 
}); 

的形式有不同的選項值幾個選擇標籤這樣:

<select name="analysis" id="analyses"> 
    <option value="" disabled="disabled" selected="selected">Select Analysis</option> 
     <option value="distance">distance</option> 
     <option value="clustered">clustering</option> 
</select> 

我看不出有什麼毛病的if-else statment。

感謝

編輯

感謝所有的很好的建議,我覺得代碼結構由@trebuchet建議的方式,工作方式:

$("#analyses").bind("change",function(){ 
.............code....... 
}); 

謝謝大家。

+2

你已經有了一個很好的答案關於如何使用jQuery做到這一點,但如果你試圖做到這一點,你可以看看這個問題:[如何使用JavaScript獲取dropdownlist的選定值?](http://stackoverflow.com/questions/1085801/ how-to-get-selected-value-drop-drop-list-using-javascript) – Cymen

回答

2

你的代碼的結構它只會在頁面加載時運行一次的方式 - 在這種情況下,選擇的值將始終是一個空字符串。如果您希望它對變化做出響應:

$("#analyses").bind("change",function(){ 

    if (document.getElementById("analyses").value == 'distance'){ 

     loadScript('/static/distance.js', function() 
     { 
      console.log('done loading'); 
     }); 
    }else{ 
     loadScript('/static/geoClusters.js', function() 
     { 
      console.log('done loading'); 
     }); 
    } 
}); 
+0

謝謝您的建議 – user94628

6

實際上,您不能像使用HTML選擇元素那樣使用value - 它具有屬性selectedIndex,但不是selectedValue。 jQuery不會在特定元素實現val(),雖然:

if ($("#analyses").val() == 'distance') 

如果你有直接的JavaScript這樣做,那麼你必須先得到選定的索引,然後從option元素的值:

var sel = document.getElementById("analyses"); 
if (sel.options[sel.selectedIndex].value) 

要回答你的問題,與原來的代碼,使用Javascript將始終執行else分支,因爲document.getElementById("analyses").valueundefined,它的JavaScript類型轉換爲「假」的布爾statem ENT。

Fiddle.

+0

謝謝。我在小提琴中嘗試過你的例子並修改了一下,但我遇到了同樣的問題。 http://jsfiddle.net/9EAsm/7/ – user94628

+0

@ user94628在你的小提琴中有腳本錯誤...看到這裏:http://jsfiddle.net/kMHVS/1/ – McGarnagle

+1

感謝您的幫助...方式我的代碼被設置了,它不起作用。感謝您的幫助。 – user94628

1

在document.ready觸發時,分析的值始終爲「」,因爲這是默認選擇的選項。我不確定,因爲第一個選項被禁用,爲什麼會發生這種情況,但顯然這就是發生的情況。

如果更改默認選擇的選項的值改爲「距離」,那麼它不解僱你可以在這裏看到:

<select name="analysis" id="analyses"> 
    <option value="" disabled="disabled">Select Analysis</option> 
     <option value="distance" selected="selected">distance</option> 
     <option value="clustered">clustering</option> 
</select>​ 

我發佈一個測試也在這裏:http://jsfiddle.net/BKD4u/

+0

感謝您的建議 – user94628