どのように(javascriptまたはjQueryを使用して)、以前に選択されたものと同じオプションであっても(つまり変更イベントは発生しない)、選択ボックスから値が選択されたときを検出できます。選択ボックスとのやりとりの検出
主に私はマウスの摂動のためにこれを必要としますが、キーボードでも機能するソリューションは便利です。
どのように(javascriptまたはjQueryを使用して)、以前に選択されたものと同じオプションであっても(つまり変更イベントは発生しない)、選択ボックスから値が選択されたときを検出できます。選択ボックスとのやりとりの検出
主に私はマウスの摂動のためにこれを必要としますが、キーボードでも機能するソリューションは便利です。
では動作しません。マークアップでは、1つの追加オプション(最初の子)を作成し、非表示にしました(通常のChrome/FF/Safari、IEでは完全に非表示にします)。それでいいよ。 jQueryのを使用して次に
<select>
<option style="display: none"></option>
<option>First</option>
<option>Second</option>
<option>Third</option>
</select>
我々は隠されたオプションの値にその値をリセットしselect
mousedown
トリガ、という方法でchange
とmousedown
イベントをバインド。
$("select").on({
change: function() {
console.log($(this).val());
},
mousedown: function() {
$(this).val($(":first", this).val());
}
});
DEMO:http://jsfiddle.net/LzNrS/
UPDATE:ユーザーが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);
}
});
また、よくできました。 –
すてきな解決策。最終的には、まったく簡単な解決策がないように、私は隣のラベルに現在の値を表示し、select値をこの値に変更してから、デフォルトのオプションにリセットすることで問題を回避することにしました。イベント。 – wheresrhys
@ wheresrhysそれは是非とも動作するはずです:) – VisioN
イベントハンドラを選択ボックスのオプション要素にアタッチし、その値を保存する場合は、頭の上から機能するかどうかはわかりません。マウスで
作品は、私が実行可能見つけた唯一の解決策はmousedown
上のいくつかの他にselect
の値を設定することにより、change
イベントを引き起こすことがあるキーボードhttp://jsfiddle.net/w4DEJ/4/
チャンスはあなたはそれが間違った方法であるものは何でもについて移動しようとしているということです。なぜあなたはこの行動をしたいのですか?個人的には、私はブラウザの動作を変更することに反対します。 –
@Tyler Crompton私は、バックボーンによって作成されたテーブルにいくつかの行を持ち、いくつかの列には値を変更して表示する選択ボックスがあります。ユーザーが最後に録音した時間のタイムスタンプを保存したいのですが、変更を行わないような対話も記録することが重要です。基本的には、私の目的のために、価値を評価し検討するユーザーは、実際に価値を変えるほど重要です。 – wheresrhys