2014-02-12 98 views
0

我的功能SelectBeatle檢查input#FindBeatle和設置的select#BeatlesselectedIndexinput#FindBeatle

但是價值,一些奇怪的原因,它好像在我的循環將不會運行:
http://jsfiddle.net/js_test/M9ty7/

上午我遺漏了什麼?循環來確定selectedIndex不起作用?



下面是HTML:

<input id="FindBeatle" type="text" /> 

<select id="Beatles"> 
    <option>John</option> 
    <option>Paul</option> 
    <option>George</option> 
    <option>Ringo</option> 
</select> 

<input type="button" onclick="SelectBeatle()" value="Submit" /> 

這裏是我JS:當你設置初始txt

var SelectBeatle = function(){ 
    var sel = document.getElementById('Beatles'), 
     val = document.getElementById('FindBeatle').value; 

     for(var i = 0, j = sel.options.length; i < j; i++) { 
      if(sel.options[i].innerHTML === val) { 
       sel.selectedIndex = i; 
       break; 
      }else{ 
       alert("Try Again!"); 
      } 
     } 
}; 
+0

什麼是在這一點上你的代碼'的i'的'價值txt = sel.options [i] .innerHTML'? – Xotic750

+0

謝謝@ Xotic750我編輯了我的問題以及我的jsfiddle以反映您的建議。但是,它仍然不起作用。 – Wilhelm

+0

在你的jsFiddle中設置'no wrap - in '。第二個下拉選項。 – Xotic750

回答

1

好吧,控制檯表示SelectBeatle是未定義的...所以當你點擊按鈕時,你的函數可能在html範圍中不可見。

當你說var,在js中,該var只存在於當前範圍內。 JSFiddle在其javascript中添加了一個函數包裝器,限制了您的範圍。

當然最好的辦法是捕捉按鈕的單擊事件:

var btn = document.getElementById('submit'); 
btn.addEventListener('click',function(event){ 
    SelectBeatle(); 
}); 

這裏有一個小提琴: http://jsfiddle.net/M9ty7/15/

+0

更清晰的解決方案的答案 – SparK

+0

我會接受你的答案,因爲這是一個改進儘管jsfiddle的浮躁,但仍然在原始代碼中工作。謝謝你的提高,我幾乎錯過了它。 – Wilhelm

+0

我正在重溫你的答案,並有兩個簡單的問題: ** No.1 - **我注意到你在'continue'的條件下替換了'sel.selectedIndex = i;'和'break;'。這是爲什麼?我是否正確地認爲'繼續;'把你踢出循環,一旦它用完了迭代,而不是在最後執行代碼? ** No.2 - **爲什麼最後會有'return'?如果沒有什麼可以返回的話,它是什麼? – Wilhelm

2

你的JS是打破。

txt = sel.options[i].innerHTML;

i尚不存在

+0

謝謝,我編輯了我的問題以及我的jsfiddle來反映您的建議。但是,它仍然不起作用。 – Wilhelm

+0

對我來說,你需要改變jsfiddle如何加載腳本,但代碼工作正常:http://jsfiddle.net/M9ty7/11/ – helion3

+0

[在元]我希望有一種方法來接受答案作爲步驟.. 。看到這是步驟1來修復代碼,並且接受的答案是步驟2 ... – SparK

-1
$('#FindBeatle').val($('#Beatles').val()); 

OR

$('#FindBeatle').val($('#Beatles :selected').text()); 
0

您的函數定義之前取出的變種。至少在jsfiddle中,這導致你的函數定義不可用於你的按鈕點擊

+1

你比我快:D ,你是對的 – SparK

+0

就是這樣。你知道是什麼原因引起這種怪癖? – Wilhelm

+0

這就是範圍,當你在js中說'var'時,這個var只存在於當前範圍內。 JSFiddle在其javascript中添加了一個函數包裝器,限制了您的範圍。 但最好的選擇是不使用'onclick =「」',使用jquery! – SparK