Angular.js: يتسبب ربط العنصر النائب Textarea في حدوث استثناء في IE11

تم إنشاؤها على ١٩ نوفمبر ٢٠١٣  ·  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 ، محاولة الوصول إلى nodeValue على TextNode غير الأبوين (nodeType = 3)

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

قد تكون مرتبطة بـ https://github.com/angular/angular.js/issues/2614 ؟؟

إليك حل مؤقت ... http://stackoverflow.com/a/20649762/1009125

ما زلت أفضل القدرة على استنشاق وكيل المستخدم ..... انظر رسالتي على # 2614

يبدو رائعًا ، ولكن ما هي القدرة التي يمكن اختبارها في هذه الحالة؟ أي .... لاف

القدرة على عدم رفع حدث عندما يتغير العنصر النائب (مثل
مقتطف نشرته في الإصدار الآخر (أعتقد أنه لا يزال ساريًا))
في 17 ديسمبر 2013 ، 21:24 ، كتب "Ender2050" [email protected] :

يبدو رائعًا ، ولكن ما هي القدرة التي يمكن اختبارها في هذه الحالة؟ أي .... لاف

-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو اعرضها على Gi tHubhttps: //github.com/angular/angular.js/issues/5025#issuecomment -30818022
.

كما يقترح المستندات: أسهل طريقة لمعالجة مثل هذه المشكلات هي التبديل من استخدام placeholder="{{value}}" إلى ng-attr-placeholder="{{value}}" .

seckardt Cool ، لم أكن أعرف شيئًا عن ngAttr . لقد كتبت توجيهًا مخصصًا كحل بديل ، لكن يمكنني الآن التخلص منه.

أرى أنه ضمن دليل / توجيهات المطور في المستندات ، ولكن ليس في مرجع واجهة برمجة التطبيقات. ألن تكون فكرة جيدة وجوده هناك أيضًا؟

هذا ليس مجرد ربط 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.

أنا أستخدم الزاوي 1.2.28 لدي نفس الخطأ.
<textarea ng-model="data">{{data}}</textarea> يعمل بشكل جيد في Mozilla. لكن IE 11 يعطي خطأ وسيطة غير صالح. لهذا الجزء من التعليمات البرمجية.
المحلول:
<textarea ng-model="data"></textarea> أو <textarea>{{data}}</textarea>
يبدو أن الارتباط بالنموذج ng ووضع القيمة يؤدي مباشرة إلى حدوث هذا الخطأ وهو أمر منطقي أيضًا.
فقط اعتقدت أن هذا قد يكون مفيدا. على أي حال ، هذا المنشور ساعدني كثيرًا.

يحدث هذا الخطأ ، لأنه (لأي سبب كان) IE قام مؤقتًا بتحويل <textarea placeholder="{{'foo'}}"></textarea> إلى <textarea placeholder="{{ 'foo' }}">{{ 'foo' }}</textarea> . يؤدي هذا إلى إضافة توجيه الاستيفاء النصي الضمني في {{ 'foo' }} TEXT_NODE ، ولكن بحلول الوقت الذي يحاول Angular تعيين قيمة TEXT_NODE ، تمت إزالته مرة أخرى بواسطة IE.

ومحاولة تعيين nodeValue لطفل TEXT_NODE بدون أب (مثل parentlessTextNode.nodeValue = 'foo' ) رميات في IE.

أعتقد أن هذه ليست مشكلة متعلقة بـ Angular و (مع الأخذ في الاعتبار أن هناك حلًا معقولًا - باستخدام ng-attr-placeholder ) يجب علينا فقط توثيقها والمضي قدمًا.

يبدو أن تقرير الخطأ هذا وثيق الصلة. يبدو أن قيمة العنصر النائب ستبقى كمحتوى <textarea> . لقد أصلحوا ذلك (على الأقل في أحدث إصدار من IE11) ، لكن ليس بنسبة 100٪ ؛ على سبيل المثال ، يظهر نص العنصر النائب كمحتوى ، وإن كان مؤقتًا فقط.

في حالتي ، ليس لدي حتى عنصر نائب. لدي شيء مشابه لهذا <textarea ng-model='$parent.freetext.text' >{{dataobject.text}}</textarea> وما زلت أتلقى خطأ الاستيفاء. أي أفكار / حل هو موضع تقدير كبير. لمعلوماتك ، أنا أستخدم إصدار 1.5 من angularjs ...

LotusShiv ، لا تضع أي قيمة في منطقة النص الخاص بك. إذا كنت تريد تهيئته ، فضع القيمة على النموذج بدلاً من ذلك.

إذن gkalpak - في حالتي ، أحتاج إلى الارتباط بالقيمة الحالية من مكالمة WebAPI والسماح أيضًا للمستخدم بتحرير منطقة النص. ومن ثم كان لدي إعداد قيمة نموذج ng و textarea. الآن الطريقة التي فهمتها من إجابتك هي أنه - لا بد لي من تعيين القيمة القادمة من استدعاء WebAPI إلى متغير كائن نطاق $ واستخدام متغير كائن النطاق $ نفسه لتعيين المحتويات المحررة أيضًا. هل أفهمك بشكل صحيح؟ مرة أخرى شكرا مقدما على أي اقتراحات / حل. كود عينة هو موضع تقدير أيضا ....

إضافة إلى تعليقي السابق ، فعلت بالضبط كما أوضحت ما فهمته من اقتراح 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 هو ألم :(

نفس الشيء مع الربط rows لـ textarea ، ونعم ، لم يكن IE يعطيني أي أدلة حتى اضطررت إلى تشغيل وضع "كسر كل استثناء" والتقدم خلال مليار من استثناءات الفرصة الأولى. كما أن معلومات تصحيح الأخطاء الزاويّة في الاستثناء أشارتني أيضًا إلى المكوّن ، ولكن ليس إلى الخطأ فيه. على أي حال ، تم الإصلاح بتغيير الربط من [rows] = "myRowsField" إلى [attr.rows] = "myRowsField"

seckardt أنت تجعل يومي. لا يزال أحد مشروعي القديم يعتمد على Angular1 ، ويكافح من أجل إيجاد حل لهذه المشكلة. شكرا جزيلا.

حتى إذا كان هناك "حل بديل سهل" ، فسيكون ذلك أسهل كثيرًا ، إذا كانت رسالة الخطأ مفيدة أكثر. لدي مشروع ضخم وفي مكان ما يوجد هذا الاستيفاء المزدوج. كيف لي أن أجد هذا؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات