2013-11-26 57 views
22

在IE10 +上使用帶有佔位符的angularJS,TextArea時,出現「無效參數」。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/

+0

這剛剛解決了IE,Angular和textareas的另一個bug。謝謝! –

+1

還存在:https://github.com/angular/angular.js/issues/5025 – gilamran

+0

只是一個fyi:我在Android chrome上遇到同樣的問題。 – transformerTroy

回答

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

'ngAttrPlaceholder'似乎已被棄用。如果你仍然想使用這種方法,你可能需要使用一個自定義指令,如[演示](https://gist.github.com/mbenford/dd7556f01963f49e5c7d)所示。或者您可以在其他答案建議的之間加一個空格。 – user1778988

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> 

一旦您的模型數據到達(可能是異步),該指令將爲<textarea>添加一個傳統的placeholder屬性,它將按您的需要工作。

這不是最好的解決方案,但它的工作原理。希望有所幫助。

+3

當我們可以使用[ng-attr-placeholder](https://docs.angularjs.org/guide/directive#-ngattr-attribute-bindings)時,無需編寫自定義指令,指令。 :) – Alexander

+0

我真的不知道'ng-attr- *'指令存在。這聽起來像它肯定會做的伎倆。 – tennisgent

6

我今天遇到這個錯誤,並在此隨機絆倒題。下面是解決了這個問題對我來說

前:

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

後:

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

注textarea的內部空間不大,這就是真正的抱怨停止IE瀏覽器...

+0

這對我不起作用,但你讓我走上了正軌!我用過:translate> {{'TRANSLATE_ME'}} <並且有這個問題(在任何地方工作,但IE的所有版本......)。當我切換到:> {{'TRANSLATE_ME'|翻譯}} <它甚至在IE中也能正常工作。 – jBoive

+0

它不會再拋出錯誤,但它不顯示佔位符文本。除了你之後刪除空間 –

+0

沒錯,他們可能在Windows 10中修復它。我實際上最終得到了一個指令,它對每個textarea都執行'element.innerText =';;',因爲我不想記住在所有文字區留下空間。 –