Angular.js: Textarea 占位符绑定在 IE11 中导致异常

创建于 2013-11-19  ·  23评论  ·  资料来源: angular/angular.js

请参阅以下小提琴:

http://jsfiddle.net/provegard/wLBwd/

当出现正确的占位符时,我还在控制台中获得以下堆栈跟踪:

Error: Invalid argument.
   at interpolateFnWatchAction (http://code.angularjs.org/1.2.1/angular.js:6366:15)
   at $digest (http://code.angularjs.org/1.2.1/angular.js:11443:21)
   at $apply (http://code.angularjs.org/1.2.1/angular.js:11682:13)
   at Anonymous function (http://code.angularjs.org/1.2.1/angular.js:1285:9)
   at invoke (http://code.angularjs.org/1.2.1/angular.js:3616:18)
   at doBootstrap (http://code.angularjs.org/1.2.1/angular.js:1283:5)
   at bootstrap (http://code.angularjs.org/1.2.1/angular.js:1297:5)
   at angularInit (http://code.angularjs.org/1.2.1/angular.js:1246:5)
   at Anonymous function (http://code.angularjs.org/1.2.1/angular.js:20126:5)
   at trigger (http://code.angularjs.org/1.2.1/angular.js:2298:7)

IE版本为11.0.9600.16438

IE10 IE11 low investigation broken expected use

最有用的评论

正如文档所建议的那样:解决此类问题的最简单方法是从使用placeholder="{{value}}"切换到ng-attr-placeholder="{{value}}"

所有23条评论

也发生在 ie10 中,试图访问无父 TextNode 上的 nodeValue (nodeType=3)

// in function addTextInterpolateDirective()
node[0].nodeValue = value

这是一个临时解决方法... http://stackoverflow.com/a/20649762/1009125

我仍然更喜欢能力嗅探而不是用户代理嗅探.....参见我在 #2614 上的帖子

听起来不错,但在这种情况下可以测试哪些功能? 即....呃

占位符更改时不引发事件的能力(例如
我在另一个问题中发布的片段(我认为它仍然适用))
2013 年 12 月 17 日 21:24,“Ender2050” [email protected]写道:

听起来不错,但在这种情况下可以测试哪些功能? 即....呃


直接回复此邮件或在 Gi tHub上查看 https://github.com/angular/angular.js/issues/5025#issuecomment -30818022
.

正如文档所建议的那样:解决此类问题的最简单方法是从使用placeholder="{{value}}"切换到ng-attr-placeholder="{{value}}"

@seccardt酷,我不知道ngAttr 。 我写了一个自定义指令作为解决方法,但现在我可以摆脱它了。

我看到它在文档中的开发人员指南/指令下,但不在 API 参考中。 把它也放在那里不是一个好主意吗?

不过,这不仅仅是placeholder绑定会引发此错误。 这以相同的行为失败:

<textarea ng-model="foo">{{ foo }}</textarea>

插值是多余的,因此在这种情况下的解决方法只是删除{{ foo }} ,但它的错误消息是如此无用,这有点烦人。 在发现问题之前,我花了几个小时解决这个问题。

设置样式style="padding: 3px; background: {{l.Color}}; opacity: 0.7; border-radius: 5px"时也会发生此错误

如何以与 IE 一起使用的方式替换此表​​达式?

这是 IE 的一个已知问题。 如上所述,您可以使用ng-attr-style="..."

任何收到此错误的人只需查找为 textarea 发送的参数。

我正在使用 angular 1.2.28 我有同样的错误。
<textarea ng-model="data">{{data}}</textarea>在 Mozilla 中运行良好。 但是,IE 11 给出了无效参数错误。 对于这段代码。
解决方案:
<textarea ng-model="data"></textarea><textarea>{{data}}</textarea>
看起来绑定到 ng-model 并直接输入值会导致这个错误,这也是合乎逻辑的。
只是认为这可能会有所帮助。 不管怎样,这篇文章对我帮助很大。

发生此错误是因为(无论出于何种原因)IE 临时将<textarea placeholder="{{'foo'}}"></textarea>转换为<textarea placeholder="{{ 'foo' }}">{{ 'foo' }}</textarea> 。 这在{{ 'foo' }} TEXT_NODE 上添加了隐式文本插值指令,但是当 Angular 尝试设置 TEXT_NODE 的值时,它已被 IE 再次删除。

并尝试在 IE 中设置无父 TEXT_NODE 的nodeValue (例如parentlessTextNode.nodeValue = 'foo' )。

我认为这不是与 Angular 相关的问题,并且(考虑到有一个合理的解决方法 - 使用ng-attr-placeholder )我们应该记录它并继续前进。

这个错误报告似乎是相关的。 占位符值似乎会保留为<textarea>的内容。 他们已经修复了这个问题(至少在最新的 IE11 中),但不是 100%; 即占位符文本确实显示为内容,尽管只是暂时的。

就我而言,我什至没有占位符。 我只是有类似于这个<textarea ng-model='$parent.freetext.text' >{{dataobject.text}}</textarea>的东西,但我仍然得到插值错误。 非常感谢任何想法/解决方案。 仅供参考,我正在使用 1.5 版本的 angularjs ......

@LotusShiv ,不要在您的文本区域中输入任何值。 如果要初始化它,请将值放在模型上。

所以gkalpak - 在我的情况下,我需要绑定到来自 WebAPI 调用的现有值,并且还允许用户编辑文本区域。 因此我有 ng-model 和 textarea 值设置。 现在我从您的回复中了解到的方式是 - 我必须将来自 WebAPI 调用的值设置为 $scope 对象变量,并使用相同的 $scope 对象变量来设置编辑的内容。 我对你的理解正确吗? 再次提前感谢任何建议/解决方案。 示例代码也很受欢迎....

我之前的评论的附录,我完全按照我从 gkalpak 的建议中解释的内容进行了解释,并且它奏效了。 感谢gkalpak ,在IE 11中工作得很好。 在尝试了这么多其他技巧和窍门之后,节省了很多心痛.... :)

正如上面许多人提到的那样,这个错误实际上是一个使用错误,在我的情况下,它不在文本区域中,但上面的评论确实有帮助。 感谢大家 :)
将为可能处于相同情况的其他人提出我的具体问题并在下面修复。

不工作;
<a concat="[result.responsible.Contact.firstName, result.responsible.Contact.lastName]">{{responsibleFullName}}</a>
在职的;
<a>{{result.responsible.Contact.firstName}} {{result.responsible.Contact.lastName}}</a>

也遇到了这个问题,对我来说是指令中的template attr。 当您仅使用template: '{{field}}'时,您将收到此错误。 对我来说,我用编译的内容替换元素 HTML,所以解决方案是删除{{field}}并只保留template: '' ,但这是一个奇怪的错误,在 IE 中调试它很痛苦:(

textarearows绑定相同,是的,IE 没有给我任何线索,直到我不得不打开“每次异常中断”模式并逐步完成十亿个第一次机会例外。 异常中的 Angular 调试信息也只指出了该组件,而不是它有什么问题。 无论如何,通过将绑定从 [rows]="myRowsField" 更改为 [attr.rows]="myRowsField"

@seccardt你让我开心。 我的一个非常老的项目仍然基于 Angular1,努力寻找解决这个问题的方法。 非常感谢。

即使有一个“简单的解决方法”,如果错误消息更有帮助,它也会容易得多。 我有一个巨大的项目,并且_somewhere_有这个双插值。 我该怎么找到这个?

此页面是否有帮助?
0 / 5 - 0 等级