Angular 中关于 IE 问题的占位符

Posted

技术标签:

【中文标题】Angular 中关于 IE 问题的占位符【英文标题】:Placeholder in Angular on IE issue 【发布时间】:2016-03-19 07:36:31 【问题描述】:

我有一个自定义输入指令,它将每个新元素作为标签添加到先前输入的项目列表中。我的代码在所有浏览器(Chrome、Safari、Firefox、Edge)中都可以正常工作,我的问题是 IE11 及更低版本。选择输入字段后,我似乎无法清除占位符文本。

我不太确定该怎么做..或如何修改它在 IE 中的表现也很好。

main.html

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

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>

和我的指令控制器:

标记目录.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】:

所以我发现问题出在&lt;tagged&gt; 指令上的disabled 元素上。

IE 解释(对他来说未知)tagged 元素的disabled 属性,并禁用所有子元素(包括输入字段)。

所以我所做的实际上是用自定义元素重命名了 disabled 元素,并在我需要的地方将其替换为新元素。

【讨论】:

以上是关于Angular 中关于 IE 问题的占位符的主要内容,如果未能解决你的问题,请参考以下文章

占位符在 IE 中无法正常工作,但适用于 Chrome

输入占位符脚本适用于没有 JQuery 的 IE 8 密码字段?

占位符 Internet Explorer 11 未显示

IE7 中的占位符

IE 中的占位符

输入字段占位符属性 ie7+