16

HTMLフォームにシンプルなリストボックスとこの非常に基本的なjQueryコードがあります

    //Toggle visibility of selected item
    $("#selCategory").change(function() {
        $(".prashQs").addClass("hide");
        var cat = $("#selCategory :selected").attr("id");
        cat = cat.substr(1);
        $("#d" + cat).removeClass("hide");
    });

現在のアイテムがマウスを使用して選択されている場合、changeイベントは正常に発生しますが、キーボードを使用してアイテムをスクロールすると、イベントは発生せず、コードは実行されません。

この動作の理由はありますか?そして、回避策は何ですか?

4

5 に答える 5

21

通常、onchangeイベントは要素がフォーカスを失うまで発生しません。も使用したいと思うでしょうonkeypress。たぶん次のようなもの:

var changeHandler = function() {
    $(".prashQs").addClass("hide");
    var cat = $("#selCategory :selected").attr("id");
    cat = cat.substr(1);
    $("#d" + cat).removeClass("hide");
}

$("#selCategory").change(changeHandler).keypress(changeHandler);

と の両方で、マウスとキーボードの両方の操作をそれぞれ説明する必要がありonchangeます。onkeypress

于 2009-08-06T06:16:47.903 に答える
4

回避策として、次のようなことを行うことができるため、変更の動作がブラウザごとに異なる場合があります。

 //Toggle visibility of selected item
    $("#selCategory").change(function() {
        $(".prashQs").addClass("hide");
        var cat = $("#selCategory :selected").attr("id");
        cat = cat.substr(1);
        $("#d" + cat).removeClass("hide");
    }).keypress(function() { $(this).change(); });

必要なイベントをチェーンして、変更イベントを手動で発生させることができます。

IE:

var changeMethod = function() { $(this).change(); };
....keypress(changeMethod).click(changeMethod).xxx(changeMethod);
于 2009-08-06T05:53:41.693 に答える
1

あなたが説明する動作、select 要素でのキーボード スクロールによる変更イベントのトリガーは、実際には Internet Explorer のバグです。DOM Level 2 Event仕様では、changeイベントを次のように定義しています。

change イベントは、コントロールが入力フォーカスを失い、フォーカスを得てからその値が変更されたときに発生します。このイベントは、INPUT、SELECT、および TEXTAREA に対して有効です。エレメント。

本当にこの動作が必要な場合は、キーボード イベントを確認する必要があると思います。

$("#selCategory").keypress(function (e) { 
  var keyCode = e.keyCode || e.which; 
  if (keyCode == 38 || keyCode == 40) { // if up or down key is pressed
     $(this).change(); // trigger the change event
  } 
}); 

ここで例を確認してください...

于 2009-08-06T06:09:01.633 に答える
0
$('#item').live('change keypress', function() { /* code */ });
于 2012-06-07T21:52:13.233 に答える
0

JQuery 1.4.1 の IE でこの問題が発生しました。キーボードを使用して変更を行った場合、コンボ ボックスの変更イベントが発生しませんでした。

JQuery 1.4.2 で修正されたようです。

于 2010-07-15T00:35:26.497 に答える