ループの代わりにswitch文を何らかの形で置き換えますか?switch文をループするためのjscriptをクローズ
答えて
クリックしたラジオボタンを見つけるために、すべてのラジオボタンをループオーバーする必要はありません。あなたの関数に直接クリックされた要素を渡すことができます。
そのためにfunction planeChoice(element) {
// element refers to the clicked radio button
var plane = element.value;
switch (plane) {
//...
}
}
仕事に、あなたの関数にthis
を渡す必要があります:
<input type="radio" name="planeButton" value="152"
onclick="planeChoice(this)" />
this
では、イベントハンドラをアタッチHTML要素を指し、この場合、それは<input>
要素を参照します。
イベントの詳細については、私はIntroduction to EventsとEarly event handlersで始まる、http://quirksmode.org記事を読むことをお勧めします。
二つのさらなる改善のための提案:
(A)あなたが代わりに対応するメッセージを決定するswitch
の文の(JavaScriptで単なるオブジェクトである)マップを使用することができます。
var map = {
"152": "A small two-place-airplane for flight training",
"172": "The smaller of two four-place airplanes"
// ...
};
マップの維持(拡張)も容易です。
あなたはラジオボタンの値を持っていたら、あなたが持つメッセージにアクセスすることができます:あなたは(文字列のような)のみプリミティブ値を格納するのに限定されるものではない
alert(map[plane]);
を、あなたはまた、機能を保存し、それらを呼び出すことができますあなたがもっと複雑なものをやりたいのなら。しかし、機能の詳細と使用方法については、JavaScriptガイドを参照してください。
(B)あなたは(これはevent bubblingを介して動作)すべての要素に同じイベントハンドラをバインドするのではなく、イベント委任を使用することができます。 、フォーム要素への参照を取得し、JavaScriptを経由して、イベントハンドラ添付
<form onclick="planeChoice(event)" ...>
あるいはさらに良い:
document.getElementById("myForm").onclick = planeChoice;
を渡されたイベントオブジェクトが情報を保持しているclick
イベントハンドラが<form>
要素に取り付けられています。どの要素がクリックされたかについて:
function planeChoice (event) {
event = event || window.event; // for IE
var target = event.target || event.srcElement; // for IE
if(target.type === "radio") { // if a radio button is clicked
var plane = target.value;
// ... further code
}
}
jQueryを試してみることをお勧めしますか?これは、必要なコードを簡素化し、簡素化するのに役立つ有用なJavaScriptライブラリです。
は、例えば、上記のコードはjQueryのでは、このように単純化することができます
$('#myForm input:radio').click(function(){
switch (this.value) {
case "152":
alert("A small two-place-airplane for flight training");
break;
// More Options go here...
default:
alert("Error in JavaScript function planeChoice");
break;
}
});
また、各ラジオボタンをクリックハンドラを使用する必要がなくなります。
技術的には、クリックハンドラが各ラジオボタンに添付されています。しかし、私はあなたがHTMLで各要素にそれを添付していないということを意味していると思います。 –
はい、正しいです。フェリックスの説明をありがとう。 – Wireblue
- 1. foreachループでswitch文を削除する
- 2. switch文のif文をwithからswitch文に変更する
- 3. switch文のループを作成する方法は?
- 4. どのようにC++のためのif文にswitch文を変換する
- 5. switch文とjquery/javascriptを使用するループ
- 6. JScript構文ベリファイア?
- 7. switch文の代わりにループを作るには?
- 8. "if"文を "switch"にする
- 9. whileループとswitch文を使用しているスキャナ
- 10. C++ 'switch'と 'while'ループ
- 11. if文をswitch文に変換する
- 12. if文をswitch文に変換する
- 13. forループを使用してswitch文の戻り値を固定する
- 14. switch文
- 15. switch文
- 16. C++のswitch文
- 17. C#のswitch文
- 18. switch文のヘルプ
- 19. Javaのswitch文
- 20. switch文のブレークメニュー
- 21. PHPのswitch文
- 22. ネストされたswitch文
- 23. ファイルをループするためのループ
- 24. switch文の真理を評価する
- 25. ブート・レプリケートのための参照クローズ
- 26. preg_matchを使用したPHP switch文
- 27. switch文を使ったシンプルなjavascript
- 28. 検索ステートメントをフィルタリングするためのSwitchステートメントの使用
- 29. C++ switch while default whileループ
- 30. forループ内switchステートメントjavascript
元の質問のほとんどを削除したのはなぜですか?それは完璧にうまくいっていて、@ Felixの答えは、編集された/短縮された質問の文脈で見れば、今、奇妙に見えます。 –
この形式では、質問はあまり意味がありません。 'switch'と' for'ループは別の目的を持っています。一度正常に交換できるだけではありません。私の答えがあなたを助けてくれなかった場合、それを指摘して質問を明確にするべきでした。しかし、あなたの問題の解決策だと思うものに集中しないでください。 –