某些应用程序必须具有“ Enter press上的下一个gui-control”功能。我们使用下面的代码注册全局处理程序,但在Bootstrap 3 Datepicker上不起作用。有人建议我们可以“替代”默认行为吗?
这是为按键事件注册全局处理程序的核心:
jQuery.extend(jQuery.expr[':'], {
focusable: function (el, index, selector) {
return $(el).is('a, button, :input, [tabindex]');
}
});
$(document).on('keypress', 'input,select,textarea', function (e) {
if (e.which == 13) {
e.preventDefault();
// Get all focusable elements on the page
var $canfocus = $(':focusable');
var index = $canfocus.index(document.activeElement) + 1;
if ($canfocus.eq(index).attr('tabindex') == -1) index++;
if (index >= $canfocus.length) index = 0;
$canfocus.eq(index).focus();
}
});
我们使用以下DP:https://eonasdan.github.io/bootstrap-datetimepicker/
jQuery JavaScript库是v2.1.4
引导程序v3.3.5
页面上用于Datapicker的代码是:
<form ...>
<div class="form-horizontal">
<div class="form-group">
<label class="col-md-2 control-label" for="Date">Datum</label>
<div class="col-md-10">
<div class="input-group date" id="datetimepicker1">
<input type="text" id="Date" name="Date" >
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
<script type="text/javascript">
$(function () {
$('#datetimepicker1').datetimepicker({ format: 'L' });
});
</script>
<span class="text-danger field-validation-valid"></span>
</div>
</div>
</div>
</form>
使用此代码,在数据选择器处于焦点的“ Enter”上没有发生任何事情。
内部有一个keydown
事件处理程序,该事件处理程序datetimepicker
会停止传播,因此会停止keypress
事件。
一种选择是重载keydown
事件并调用自定义事件,并传递消息which
,然后为keydown
:-调用原始事件。
// get original keydown event
var h = jQuery._data($('#datetimepicker1 input')[0], "events").keydown[0].handler;
// override keydown
jQuery._data($('#datetimepicker1 input')[0], "events").keydown[0].handler = function(e) {
// create a new custom event and trigger it with 'which' passed
var event = $.Event('dpkeydown');
event.which = e.which;
$(this).trigger(event);
// call original keydown event
h(e);
}
// now watch for 'dpkeydown'
$(document).on('keypress dpkeydown', 'input,select,textarea', function(e) {
if (e.which == 13) {
.....
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句