8

わかりました。onChange は、オプションが変更されたときに select ステートメントで JavaScript コードを実行するために使用されます。ただし、矢印キーを使用して select ステートメントを変更すると、onChange イベントは呼び出されません。これを回避する方法はありますか?助けてください!私は OCD です。

--編集1--

これをIEでテストしたところ、矢印キーが機能します。どうやらそれはただのChromeです。** Firefox のチェックに行く

-- 編集 2 --

Firefox でテストし、変更に必要な onBlur アクションについて以下の回答で説明する直前に実現しました。したがって、ここでの答えは次のとおりです。

Internet Explorer は、キーボードからの onChange イベントと、それらのクリックを認識します。onChange を呼び出すには、Firefox と Chrome の両方でキー イベントの後に blur イベントが続く必要があります。

通常、私は Internet Explorer が好きではありません。なぜなら、それはゴミのかけらだからです.

Chrome と Firefox でのぼかしイベントの理由についての私の理解は、リソースを節約することですが、それには同意しません。コマンド onChange の文字通りの解釈に従うべきだと思います... はぁ... 多分私はどういうわけか間違っていると思います。

4

6 に答える 6

4

Key Up イベントに必要なコードを記述して、キーの押下をキャプチャし、キー コードを確認することをお勧めします。お役に立てれば

于 2011-07-05T18:21:50.840 に答える
4

これに戻ると、この質問をして以来、Chrome は重要なイベントの後に onChange を起動するようになりました。Firefox はまだ onblur を待っているようです。http://jsfiddle.net/2aQBN/

$(document).ready(function() {
    $("#test").on("change", function() {
        console.log("Changed.");
    });
});

W3C 仕様inputでは、代わりにイベントを使用することを提案しているようです。

入力イベントが適用されると、ユーザーが要素の値を変更するたびに、ユーザー エージェントはタスクをキューに入れ、入力要素で名前付き入力をバブリングする単純なイベントを起動する必要があります。

ただし、 select 要素に対してChrome またはFirefox で発生する入力イベントは表示されません。(要素を入力するだけです。)

現在の値と最後の onchange 値を比較するテスト。

http://jsfiddle.net/teynon/MpyHK/5/

Firefox は onmouseover で値を変更します。キーを変更すると、値も変更されます。ただし、onchange は起動していません。ユーザーが選択メニューを開いている間にフォームが送信されると、現在強調表示されているオプションが送信されます。

W3C より:

multiple 属性がなく、要素が無効になっていない場合、ユーザー エージェントは、それ自体が無効になっていないオプションのリストでオプション要素をユーザーが選択できるようにする必要があります。このオプション要素が選択されたとき (クリック、値の変更後に要素のフォーカスを外すこと、メニュー コマンド、またはその他のメカニズムを介して)、および関連するユーザー インタラクション イベントがキューに入れられる前 (たとえば、クリック イベントの前) )、ユーザー エージェントは、選択されたオプション要素の選択性を true に設定し、ユーザー対話タスク ソースをタスク ソースとして使用して、select 要素で変更という名前のバブルを発生させる単純なイベントを発生させるタスクをキューに入れる必要があります。

これについては、 https://bugzilla.mozilla.org/show_bug.cgi?id=126379で長い議論があり、多くの人が矢印キーが機能することを求めています。(そして、onchange アプローチを擁護する人もいます。)

select一部のユーザーは、要素のchangeイベントの仕様において W3C が完全に間違っていることを示唆しています。select代わりに、の機能がどのように動作すると予想されるかについて、仕様の変更を提案しますonchange

現在の機能は、バグ レポートの数だけに基づいて、多数の人々にとって明らかに直感的ではありません。(Mozilla には重複としてマークされた 40 があります。)

于 2013-06-19T13:43:52.970 に答える
4

選択ボックスのスクロールは、変更とは見なされません。変更は、select を blur() すると発生し、新しいオプション値が select 要素に適用されます。

于 2011-07-05T18:24:28.870 に答える
0

私はこのようなことを考えています(値が変更されなかった場合にイベントをトリガーしないようにするため):

            select.keydown(function(){
                var _this = $(this);
                var _val = $(this).val();

                setTimeout(function(){    
                    if(_this.val() !== _val){
                        _this.trigger("change");
                    }
                }, 1);
            });
于 2015-08-10T11:50:25.377 に答える