我有这个dropdown
,我希望在其中的值发生变化时提醒/记录某些内容。当我用鼠标单击dropdown
并选择任何其他值时,会触发更改事件。但是当焦点位于dropdown
时,我按下up
和down
箭头,它会更改下拉菜单中的值,但不会触发该事件,现在会显示警报。
这是代码
<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
箭头的事件,我希望触发该事件。为什么不开火,如何从键盘上改变它?
答案 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');
}
});
答案 2 :(得分:1)
您使用的浏览器是什么?
在我的Chrome和IE9中,您提供的小提琴可以正常使用键盘。
答案 3 :(得分:0)
您可以合并change
和keyup
事件。如果你的事件处理程序只在值实际发生变化时才能完成工作,那么你必须在其中添加更多逻辑(记住旧值,比较,行动......)
$('#drpDay, #drpMonth').on("change keyup", function(event) {
//...
});