Bootstrap 3 Datepicker传播按键事件

伊戈尔

某些应用程序必须具有“ 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章