5

私はこれを持っていdropdownます。値が変更されたときに何かを警告/ログに記録したいと思います。マウスでをクリックしdropdownて他の値を選択すると、変更イベントが発生します。しかし、フォーカスが にありdropdown、矢印を押すupdown、ドロップダウンの値が変更されますが、イベントは発生せず、アラートが表示されます。これがコードです

<select id="drpDay" name="drpDay" style="background-color: white;">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7" selected="selected">7</option>    
    </select>
</br>
<select id="drpMonth" name="drpMonth" style="background-color: white;">
        <option value="Jan">Jan</option>
        <option value="Feb">Feb</option>
        <option value="Mar">Mar</option>
        <option value="Apr">Apr</option>
        <option value="May">May</option>
        <option value="Jun">Jun</option>
        <option value="Jul">Jul</option>
        <option value="Aug">Aug</option>
        <option value="Sep">Sep</option>
        <option value="Oct">Oct</option>
        <option value="Nov" selected="selected">Nov</option>
        <option value="Dec">Dec</option>    
    </select>
</br>
<label id="lbl" text="" width="auto">adsf</label>

jsは

$('#drpDay, #drpMonth').change(function(event) {
    alert(event.which);
    $('#lbl').text('change ' + event.which + ' and ' + $(event.target).attr('id'));
});

ここにフィドルがありますhttp://jsfiddle.net/2NBPx/4/

私が欲しいのは、選択ボックスの値が変更されたとき、upおよび/またはdown矢印を押すことでイベントが発生したときです。が起動しないのはなぜですか?キーボードからの変更で起動するにはどうすればよいですか?

4

4 に答える 4

8

keyup にバインドし、次のように変更します: http://jsfiddle.net/2NBPx/6/

$('#drpDate, #drpMonth').on('change keyup',function(event) {
    if($(this).data('last') !== $(this).val()){
        $(this).data('last', $(this).val());            
        $('#lbl').text('For change ' + event.which + ' and you ' + $(event.target).attr('id'));
    }
});

UPDATE: 実際の変更が発生した場合にのみ発生します。

于 2012-11-06T07:04:19.193 に答える
2

以下は、キーボードまたはマウスを介して、選択が変更されるたびに変更イベントが発生することを保証します。

var prevValue = null;

$('#drpDay').change(function() {
    console.log('changed');
    prevValue = this.value;
});

$('#drpDay').keyup(function() {
    if(prevValue != this.value) {
        $(this).trigger('change');
    }
});

このデモを確認してください:http ://jsfiddle.net/ZCxe8/

于 2012-11-06T07:21:41.263 に答える
1

どのブラウザを使用していますか?

私のChromeとIE9では、提供したフィドルはキーボードで正常に機能します。

于 2012-11-06T07:21:01.960 に答える
0

changekeyupイベントを組み合わせることができます。値が実際に変更されたときにのみイベント ハンドラーが処理を実行する必要がある場合は、さらにロジックを追加する必要があります (古い値を記憶する、比較する、動作するなど)。

$('#drpDay, #drpMonth').on("change keyup", function(event) {
    //...
});
于 2012-11-06T07:04:42.847 に答える