以前に選択されたものと同じオプションである(つまり、変更イベントが発生しない)場合でも、(JavascriptまたはjQueryを使用して)選択ボックスから値が選択されたことをどのように検出できますか?
主にマウスの操作にこれが必要ですが、キーボードでも機能するソリューションが便利です。
以前に選択されたものと同じオプションである(つまり、変更イベントが発生しない)場合でも、(JavascriptまたはjQueryを使用して)選択ボックスから値が選択されたことをどのように検出できますか?
主にマウスの操作にこれが必要ですが、キーボードでも機能するソリューションが便利です。
focus()関数が役立つと思います。これを試してください:http: //api.jquery.com/focus/
選択ボックスのオプション要素にイベントハンドラーをアタッチし、クリックしてその値を保存できれば、頭のてっぺんから機能するかどうかはわかりません。
マウスでは動作しますが、キーボードでは動作しませんhttp://jsfiddle.net/w4DEJ/4/
私が実行可能だと思った唯一の解決策は、の値を他change
の値に設定してイベントを発生させることです。マークアップでは、1つの追加オプション(つまり、最初の子)を作成し、それを非表示にしました(Chrome / FF / Safari、IEでは通常どおり完全に非表示になります)。だからそれはうまく見えます。select
mousedown
<select>
<option style="display: none"></option>
<option>First</option>
<option>Second</option>
<option>Third</option>
</select>
次に、jQueryを使用して、トリガー時にその値を非表示オプションの値にリセットする方法でバインドchange
し、mousedown
イベントを実行します。mousedown
select
$("select").on({
change: function() {
console.log($(this).val());
},
mousedown: function() {
$(this).val($(":first", this).val());
}
});
デモ:http: //jsfiddle.net/LzNrS/
更新:ユーザーがクリックしたが何も選択しないことを決定したときに選択した値を保持するために、イベントをselect
追加して更新するコードを少し変更できます。blur
mousedown
var special = ""; // special hidden option value
var value = ""; // temporary variable
$("select").on({
change: function() {
console.log($(this).val());
},
mousedown: function() {
if (this.value == special) {
$(this).val(value);
return;
}
value = this.value;
$(this).val(special);
},
blur: function() {
if (this.value == special)
$(this).val(value);
}
});
デモ:http: //jsfiddle.net/LzNrS/1/