jQuery更改事件没有从键盘触发?

时间:2012-11-06 06:55:51

标签: events dom jquery-selectors jquery

我有这个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 个答案:

答案 0 :(得分:7)

将其绑定到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:仅在实际发生变化时被触发。

答案 1 :(得分: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/

答案 2 :(得分:1)

您使用的浏览器是什么?

在我的Chrome和IE9中,您提供的小提琴可以正常使用键盘。

答案 3 :(得分:0)

您可以合并changekeyup事件。如果你的事件处理程序只在值实际发生变化时才能完成工作,那么你必须在其中添加更多逻辑(记住旧值,比较,行动......)

$('#drpDay, #drpMonth').on("change keyup", function(event) {
    //...
});