私は困惑しています。ドロップダウンリストのあるフォームがあり、リスト内のすべての値のリストを取得したいと思います。私はw3の学校から以下の例を引き出しました(はい、それは信頼できないことはわかっていますが、スタックオーバーフローの他の解決策はこれに非常に似ているようです)。それは私のために働いていなかった、と私はjsfiddleにプラグインしようとしましたが、運はありませんでした。
HTML:
<form>Select your favorite fruit:
<select id="mySelect">
<option value="a">Apple</option>
<option value="o">Orange</option>
<option value="p">Pineapple</option>
<option value="b">Banana</option>
</select>
</form>
<button type="button" onclick="displayResult()">Display text of all options</button>
javascript:
function displayResult() {
var x = document.getElementById("mySelect");
var txt = "All options: ";
var i;
for (i = 0; i < x.length; i++) {
txt = txt + "\n" + x.options[i].value;
}
alert(txt);
}
Jsfiddleで動作しない: http://jsfiddle.net/WfBRr/1/
ただし、サイトでは機能します。 http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_option_text2
これを解決する方法についてのアイデアはありますか?
次の2つの問題がありました。
1)HTMLを含めた順序。フィドルのJavaScript設定で、ドロップダウンを「onLoad」から「no wrap-head」に変更してみてください。
2)関数は値を出力します。あなたが実際に求めているのはテキストです
x.options[i].text;
の代わりに x.options[i].value
;
変化する:
x.length
に:
x.options.length
fiddle へのリンク
そして、私はアブラハムに同意します-あなたはtext
の代わりにvalue
を使いたいかもしれません
更新
フィドルが機能しなかった理由は、「No wrap-in」ではなく「onLoad」オプションを選択したためです。
クリックイベントをボタンに直接配置すると問題が発生するようです。何らかの理由で、関数が見つかりません。なぜかわからない...
ただし、javascriptにイベントハンドラーをアタッチすると、機能します。
こちらをご覧ください: http://jsfiddle.net/WfBRr/7/
<button id="display-text" type="button">Display text of all options</button>
document.getElementById('display-text').onclick = function () {
var x = document.getElementById("mySelect");
var txt = "All options: ";
var i;
for (i = 0; i < x.length; i++) {
txt = txt + "\n" + x.options[i].value;
}
alert(txt);
}
DOM構造に従って、以下のコードを使用できます。
var x = document.getElementById('mySelect');
var txt = "";
var val = "";
for (var i = 0; i < x.length; i++) {
txt +=x[i].text + ",";
val +=x[i].value + ",";
}