2

以前に選択されたものと同じオプションである(つまり、変更イベントが発生しない)場合でも、(JavascriptまたはjQueryを使用して)選択ボックスから値が選択されたことをどのように検出できますか?

主にマウスの操作にこれが必要ですが、キーボードでも機能するソリューションが便利です。

4

3 に答える 3

0

focus()関数が役立つと思います。これを試してください:http: //api.jquery.com/focus/

于 2012-05-07T12:26:35.263 に答える
0

選択ボックスのオプション要素にイベントハンドラーをアタッチし、クリックしてその値を保存できれば、頭のてっぺんから機能するかどうかはわかりません。

マウスでは動作しますが、キーボードでは動作しませんhttp://jsfiddle.net/w4DEJ/4/

于 2012-05-07T10:58:53.743 に答える
0

私が実行可能だと思った唯一の解決策は、の値を他changeの値に設定してイベントを発生させることです。マークアップでは、1つの追加オプション(つまり、最初の子)を作成し、それを非表示にしました(Chrome / FF / Safari、IEでは通常どおり完全に非表示になります)。だからそれはうまく見えます。selectmousedown

<select>
    <option style="display: none"></option>
    <option>First</option>
    <option>Second</option>
    <option>Third</option>
</select>​

次に、jQueryを使用して、トリガー時にその値を非表示オプションの値にリセットする方法でバインドchangeし、mousedownイベントを実行します。mousedownselect

$("select").on({
    change: function() {
        console.log($(this).val());
    },
    mousedown: function() {
        $(this).val($(":first", this).val());
    }
});​

デモ:http: //jsfiddle.net/LzNrS/

更新:ユーザーがクリックしたが何も選択しないことを決定したときに選択した値を保持するために、イベントをselect追加して更新するコードを少し変更できます。blurmousedown

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/

于 2012-05-07T11:58:39.263 に答える