В раскрывающемся списке Kendo не выполняется функция привязки ng-focus

У меня есть этот раскрывающийся список на шаблоне

<select id="{{vm.field.id}}"
        kendo-drop-down-list
        k-data-source="vm.field.options"
        k-data-value-field="'code'"
        k-data-text-field="'description'"
        k-index="vm.selectedIndex"
        k-ng-model="vm.field.value"
        k-value-primitive="true"
        k-options="vm.field.config"
        ng-blur="vm.unfocusField()"
        ng-focus="vm.focusField()"
        k-on-change="vm.onValueChange()">
</select>

Как вы можете видеть, у меня установлен ng-focus (нацеливание на функцию vm.focusField()), это событие правильно применяется и функция срабатывает, когда я фокусирую поле, щелкая мышью по нему. Но когда это поле фокусируется с помощью табуляции (вкладка клавиатуры) из предыдущего поля в списке форм. Когда я нажимаю tab, поле становится "сфокусированным", так как в html к элементу добавляется класс "k-state-focus", и я могу использовать кнопки курсора вверх и вниз для изменения значения выпадающего списка, НО, привязанной к ng-focus функции не выполняется. В резюме это нг-фокусировка слов с фокусировкой по клику, но не выполняется фокусировка с помощью вкладки клавиатуры. Я доказал, что эта функция не вызывается в этой ситуации с использованием инструментов разработчика и точек останова на связанной функции

1 ответ

Я получил этот пример кода от службы поддержки Telerik, который помог решить мою проблему.

 <!DOCTYPE html>
    <html>
    <head>
        <base href="http://demos.telerik.com/kendo-ui/dropdownlist/angular">
        <style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style>
        <title></title>
        <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2017.1.118/styles/kendo.common.min.css" />
        <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2017.1.118/styles/kendo.blueopal.min.css" />
        <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2017.1.118/styles/kendo.blueopal.mobile.min.css" />

        <script src="https://kendo.cdn.telerik.com/2017.1.118/js/jquery.min.js"></script>
        <script src="https://kendo.cdn.telerik.com/2017.1.118/js/angular.min.js"></script>
        <script src="https://kendo.cdn.telerik.com/2017.1.118/js/kendo.all.min.js"></script>
    </head>
    <body>
    <div id="example" ng-app="KendoDemos">
        <div class="demo-section k-content" ng-controller="MyCtrl">
        <h4>Static data</h4>
        <select kendo-drop-down-list="mydropdown">
          <option>Albania</option>
          <option>Andorra</option>
          <option>Armenia</option>
          <option>Austria</option>
        </select>
    </div>
    </div>
    <script>
       var app = angular.module("KendoDemos", [ "kendo.directives" ])
          .controller("MyCtrl", function($scope){  
              $scope.$on("kendoWidgetCreated", function(event, widget){
                if (widget === $scope.mydropdown) {
                  widget.wrapper.on("focus", $scope.onFocus);
                  widget.wrapper.on("blur", $scope.onBlur);
                }
              });

            $scope.onFocus = function(){
                console.log("Kendo DropDownList focused!");
            };

            $scope.onBlur = function(){
                console.log("Kendo DropDownList blured!");
            };
          });

    </script>
Другие вопросы по тегам