JQuery UI datepicker似乎存在一个错误,当用户手动输入日期并点击输入时,datepicker关闭但焦点停留在该字段上,因此日历将不再打开,直到文本框失去焦点并获得它再次。 我如何抑制回车键行为?或者这个看似已知的错误还有其他已知的解决方案吗? 谢谢!
修改
在完成这项工作之后,这是我提出的解决方案:
$('#someid').bind('keydown', function(event) {
if (event.which == 13) {var e=jQuery.Event("keydown");
e.which = 9;//tab
e.keyCode = 9;
$(this).trigger(e);
return false;
}
});
tab键效果很好,可以防止datepicker的输入键事件的默认行为,例如在某些情况下选择今天的日期。
答案 0 :(得分:6)
我最初在应用您的解决方案时遇到了问题。我认为有必要发布我的更大的代码片段,以提供更多的背景。
if (!Modernizr.inputtypes.date) {
//use modernizer to weed out browsers that already have a timepicker
//http://stackoverflow.com/questions/11297827/html5-date-input-type-interfering-with-jquery-datepicker
$("input[data-val-date]")
.bind('keydown', function (event) { // BEGIN APPLYING NinaNa's S.O. ANSWER
if (event.which == 13) {
var e = jQuery.Event("keydown");
e.which = 9;//tab
e.keyCode = 9;
$(this).trigger(e);
return false;
}
}).datepicker({ dateFormat: 'mm/dd/yy' }); //THEN APPLY JQUERY UI FUNCTIONALITY
}
答案 1 :(得分:3)
试试这个
$(document).keydown(keyDownHandler); // use appropriate selector for the keydown handler
function keyDownHandler(e) {
if(e.keyCode === 13) {
e.stopPropagation();
e.preventDefault();
return false;
}
}
我认为 e.stopPropagation
可以防止冒泡,e.preventDefault
可以防止默认行为,也可以返回false。
您应该了解最有效的方法:keyUp
,keyDown
或keyPress
。
答案 2 :(得分:2)
通过向datepicker的onClose方法添加blur()事件来解决。
答案 3 :(得分:1)
最简单的方法是像往常一样在<input>
上实例化datepicker,然后自己摆脱焦点处理程序并用点击处理程序替换它。
答案 4 :(得分:0)
使用e.stopImmediatePropagation()
,并确保在调用datepicker()
之前进行了keydown绑定。
$('input').on('keydown', function(e) {
if (e.which == 13)
e.stopImmediatePropagation();
}).datepicker();