(هذا) لا يعمل؛يؤدي إلى "خطأ TypeError: لم يتم اكتشافه:لا يمكن قراءة الخاصية "سلسلة فرعية" غير محددة"

StackOverflow https://stackoverflow.com//questions/23054906

سؤال

لدي الكود التالي الذي قام 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 سيكون العنصر الصحيح

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top