これを行うためのエレガントで柔軟な方法: http
://jsfiddle.net/AyCFt/13/ jsFiddleは、尋ねられた質問に取り組むだけです(アラートを表示します)。以下のコードは、コードがはるかに柔軟であることを示していますが、他の回答のif / switchステートメントが不要な場合は、それらを回避しています。
HTML:select要素にidを追加し、data-alertという名前のカスタム属性を追加しました。これには、選択時にアラートを表示する必要がある各オプションのメッセージが含まれています。これらの属性はHTML5以降で有効ですが、以前のHTMLバージョンでも正常に機能します。
<select id="selectAlert">
<option selected="selected">Please select your Login</option>
<option>--------------------------</option>
<option id="#projectmanager" data-alert="Hello">Project Manager</option>
<option id="#projectmanager2" data-alert="Hello to you too">Project Manager 2</option>ello
</select>
Javascript(バージョン1):アラートが必要で、簡潔でクリーンなコードが好きな場合:
$(function() {
$("#selectAlert").change(function(){
var alertMsg = $(this).find(":selected").attr("data-alert");
if(alertMsg) alert(alertMsg);
});
});
このソリューションでは、テキストやオプションの値を強制的に表示しないことに注意してください。アラートメッセージは、希望どおりに自由に選択できます。
なぜこのようにするのですか? この種のソリューションは、ロジックをデータから切り離します。したがって、select
サーバー側のコードを使用して(動的に生成されたページの一部として、またはAJAXを介して)生成する場合、回避できるのであれば、理想的には同じ方法でJavascriptを生成する必要はありません。あなたのコードと他のいくつかのソリューションのコードはアラートメッセージをJavascriptコードに入れますが、このソリューションはそれらをoption
HTMLのそれぞれの中に入れます。
Javascript(バージョン2):やらなければならないことがもっとある場合:
$(document).ready(function() {
$("#selectAlert").change(function(){
var $selected = $(this).find(":selected"); //faster than $("#selectAlert :selected") as it only searches among the options in the select and not the whole DOM like another answer's solution
//some code: you can do what you want with $selected here get it's value, its id, etc etc
var alertMsg = $selected.attr("data-alert")
if(alertMsg) alert(alertMsg);
//some more code here
});
});
質問
に投稿されたコードの問題:投稿したコードの問題click
は、select要素のオプションを使用していたことでした。ご存知のとおり、このイベントは個々のオプションに対して定義されていません。
UIイベントに関する一般的なポイント:一般に、デバイスに依存しない、より「セマンティックな」イベントを可能な限り処理することをお勧めします。この場合、使用しているイベントは、selectの値が変更されたことを通知するイベントです。ユーザーがマウス、キーボード、またはタッチを使用してそうしたかどうかは関係ありません!!!