Подтвердить что ты не робот

AngularJS на IE10 +, textarea с записями "Недопустимый аргумент".

Я получаю "Недопустимый аргумент" при использовании angularJS, TextArea с placeholder, на IE10 +.

Это произойдет ТОЛЬКО, когда textarea node будет закрыто с помощью </textarea> и не произойдет, когда я закрою текстовое поле сейчас.

Это приведет к исключению "Недопустимый аргумент":

<div ng-app>
    <input ng-model="placeholderModel" type="text"/>
    <textarea id="message" placeholder="{{placeholderModel}}" ng-model="textareaModel"></textarea>
</div>

Это будет работать без проблем:

<div ng-app>
    <input ng-model="placeholderModel" type="text"/>
    <textarea id="message" placeholder="{{placeholderModel}}" ng-model="textareaModel"/>
</div>

Пример работы здесь: http://jsfiddle.net/huecc/

4b9b3361

Ответ 1

Это, похоже, проблема с тем, как вы привязываетесь к элементу-заполнителю элемента - странно, я знаю.

Я смог получить все, что правильно работает в IE, используя директиву ng-attr-placeholder вместо привязки непосредственно к атрибуту в DOM.

Например, вместо:

<textarea placeholder="{{placeholderModel}}" ng-model="textareaModel"></textarea>

Попробуйте следующее:

<textarea ng-attr-placeholder="placeholderModel" ng-model="textareaModel"></textarea>

Связанный: Ошибка AngularJS v1.2.5 script с атрибутом textarea и placeholder с использованием IE11

Ответ 2

Сегодня я испытал эту ошибку и случайно наткнулся на этот вопрос. Вот то, что решило это для меня

До:

<textarea placeholder="{[{ 'NAME' | translate }]}" ng-model="name" name="name"></textarea>

После того, как:

<textarea placeholder="{[{ 'NAME' | translate }]}" ng-model="name" name="name"> </textarea>

Обратите внимание на небольшое пространство внутри текстового поля, что фактически остановило IE от жалобы...

Ответ 3

Я знаю, что этот вопрос сейчас довольно старый, но я подумал, что тоже брошу свои мысли. Мы столкнулись с этим вопросом несколько месяцев назад и должны были исправить исправление, поэтому мы решили использовать эту директиву для решения проблемы:

mod.directive('placeHolder', [
    function(){
        return {
            restrict: 'A',
            link: function(scope, elem, attrs){
                scope.$watch(attrs.placeHolder, function(newVal,oldVal){
                    elem.attr('placeholder', newVal);
                });
            }
        };
    }
]);

И затем вы можете использовать его в своих представлениях:

<textarea place-holder="placeholderModel" ng-model="textareaModel"></textarea>

Как только ваши данные модели поступят (возможно, асинхронно), директива добавит традиционный атрибут placeholder к <textarea>, и он будет работать так, как вы хотели бы.

Это не самое лучшее решение, но оно работает. Надеюсь, что это поможет.