Хобрук: Ваш путь к мастерству в программировании

Заполнитель в Angular по проблеме IE

У меня есть пользовательская директива ввода, которая добавляет каждый новый элемент в качестве тега в список ранее введенных элементов. И мой код отлично работает во всех браузерах (Chrome, Safari, Firefox, Edge), моя проблема связана с IE11 и ниже. Кажется, я не могу очистить текст заполнителя после выбора полей ввода.

Я не совсем уверен, что делать ... или как изменить, чтобы он хорошо работал и в IE.

main.html

<tagged disabled="{{ canNotEdit }" property="newProfile.educationSubjects" placeholder="{{ 'newVacancy.educationFieldsPlaceholder' | translate }}">
</tagged>

помеченный.html

<div ng-class="{'element-disabled': disabled }" class="position-relative">
    <div class="position-relative">
        <input type="text"
               ng-disabled="{{ disabled }}"
               class="inpt"
               placeholder="{{ placeholder }}">
        <span class="caret">
            <svg class="caret-icon">
                <use xlink:href="images/svg-generated/svg/symbols.svg#add-s">
                </use>
            </svg>
        </span>

        <div>
            <div class="taglist list-inline">
                <ul>
                    <li class="tag"
                        ng-click="removeItem($index)"
                        ng-repeat="item in dataArray track by $index">
                        {{ item }}
                        <svg class="tag-close">
                            <use xlink:href="images/svg-generated/svg/symbols.svg#remove"></use>
                        </svg>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>

и мой директивный контроллер:

помеченный-dir.js

'use strict';

export default function() {
  return {

    restrict: 'E',

    scope: {
      dataArray: '=property',
      disabled: '@',
      placeholder: '@'
    },

    templateUrl: '..path-to/tagged.html',

    link: function(scope, element) {

      var input = angular.element(element.find('input')[0]);
      var button = angular.element(element.find('span')[0]);

      scope.removeItem = function(index) {
        if(scope.disabled === 'true') {
          return false;
        }
        scope.dataArray.splice(index, 1);
      };

      function addTag() {

        let val = input.val().replace(/\/|\\/g, '');

        if(!val) {
          return;
        }

        scope.dataArray.push(val);
        scope.$digest();

        input.val('');
      }

      input.bind('keydown keypress', function(event) {
        if(event.which === 13 && scope.disabled !== 'true') {
          event.preventDefault();
          addTag();
        }
      });

      input.bind('mouseenter', function() {
        if(scope.disabled === 'true') {
          return false;
        }
        element.addClass('taglist-hovered');
      });

      input.bind('mouseleave', function() {
        if(scope.disabled === 'true') {
          return false;
        }
        element.removeClass('taglist-hovered');
      });

      input.bind('focus', function() {
        if(scope.disabled === 'true') {
          return false;
        }
        element.addClass('taglist-focused');
      });

      input.bind('blur', function() {
        if(scope.disabled === 'true') {
          return false;
        }
        element.removeClass('taglist-focused');
      });

      button.on('click', function(event) {
        if(scope.disabled === 'true') {
          return false;
        }
        addTag();
      });

    }
  };
};

Ответы:


1

Итак, я обнаружил, что проблема была с элементом disabled в директиве <tagged>.

IE интерпретирует атрибут disabled для (неизвестного ему) элемента tagged, а также отключает все дочерние элементы (включая поле ввода).

Итак, что я сделал, так это переименовал элемент disabled в пользовательский и заменил его новым там, где мне это было нужно.

16.12.2015
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..