IE10 +上的AngularJS,带占位符的textarea导致“参数无效”。

时间:2013-11-26 18:07:44

标签: javascript angularjs internet-explorer-10

在IE10 +上使用angularJS,TextArea和占位符时,我得到“无效参数”。

仅当textarea节点以</textarea>关闭时才会发生这种情况,并且当我现在关闭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/

3 个答案:

答案 0 :(得分:22)

这似乎是你绑定到元素占位符的方式的一个问题 - 奇怪,我知道。

我能够使用ng-attr-placeholder指令在IE中正常工作,而不是直接绑定到DOM中的属性。

例如,而不是:

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

试试这个:

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

相关: AngularJS v1.2.5 script error with textarea and placeholder attribute using IE11

答案 1 :(得分:6)

我今天遇到了这个错误,随机偶然发现了这个问题。这就是为我解决的问题

<强>之前:

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

<强>后:

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

请注意textarea内部的小空间,这实际上阻止了IE抱怨......

答案 2 :(得分: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>属性,并且它可以按您的需要工作。

它不是最好的解决方案,但它确实有效。希望有所帮助。