(هذا) لا يعمل؛يؤدي إلى "خطأ TypeError: لم يتم اكتشافه:لا يمكن قراءة الخاصية "سلسلة فرعية" غير محددة"
-
23-12-2019 - |
سؤال
لدي الكود التالي الذي قام Chrome Inspector بتصحيحه مع ظهور الخطأ "Uncaught TypeError:لا يمكن قراءة الخاصية "سلسلة فرعية" غير محددة":
<script type="text/javascript">
$(function countComments() {
var mcount = '//api.moot.it/postcounts?path=/forum/comments:' + $(this).closest('article').attr('id').substring(8);
$.getJSON(mcount, function(json) {
var results = $('.entry-actions');
$.each(json, function(key, val) {
results.prepend('<a class="entry-comments" href="{permalink}#comments" title="Comments">' + val['size'] + ' Comments</a>');
});
});
});
</script>
أنا متأكد من أن المشكلة تكمن في (this)
, ، لكنني استخدمته بشكل صحيح في برنامج نصي مختلف مع .click
وهذا الرمز يعمل بشكل جيد.
هل هذا بسبب (this)
لا يمكن استخدامها على .ready
؟إذا كان الأمر كذلك، كيف يمكنني جعل هذه الوظيفة تعمل مع الكود البديل؟
تحرير باستخدام HTML:
<article id="article-5344bff8e4b01730378236ff">
<header class="entry-header cf">
<p class="entry-actions"></p>
</header>
<div class="entry-title-wrapper">
BLOG CONTENTS
<div class="entry-injection">
<script type="text/javascript">
$(function countComments() {
var mcount = '//api.moot.it/postcounts?path=/forum/comments:' + $(this).closest('article').attr('id').substring(8);
$.getJSON(mcount, function(json) {
var results = $('.entry-actions');
$.each(json, function(key, val) {
results.prepend('<a class="entry-comments" href="{permalink}#comments" title="Comments">' + val['size'] + ' Comments</a>');
});
});
});
</script>
</div>
</div>
</article>
المحلول
المشكلة هي أنه في وظيفة وثيقة جاهزة this
يشير إلى الوثيقة http://jsfiddle.net/IrvinDominin/J2r5V/
في هذه الحالة لا يمكن أن يكون لديك أي article
العنصر الأصلي للمستند، لذا فإن وظيفتك تثير الخطأ http://jsfiddle.net/IrvinDominin/J2r5V/1/.
أعتقد أن عليك الحصول على كل ما لديك div
العناصر وفقًا لاحتياجاتك، ولكل منها تنفيذ الوظيفة الحالية؛في سياق كل منهما this
سيكون العنصر الصحيح