(das) funktioniert nicht;führt zu „Uncaught TypeError:Die Eigenschaft „Teilzeichenfolge“ von „undefiniert“ kann nicht gelesen werden.
-
23-12-2019 - |
Frage
Ich habe den folgenden Code, den Chrome Inspector mit dem Fehler „Uncaught TypeError“ debuggt:Die Eigenschaft „Teilzeichenfolge“ von „undefiniert“ kann nicht gelesen werden:
<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>
Ich bin mir ziemlich sicher, dass das Problem bei liegt (this)
, aber ich habe es richtig in einem anderen Skript mit verwendet .click
und dieser Code funktioniert einwandfrei.
Ist es weil (this)
Kann nicht verwendet werden .ready
?Wenn ja, wie könnte ich diese Funktion mit alternativem Code zum Laufen bringen?
BEARBEITEN mit 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>
Lösung
Das Problem ist, dass es sich um eine Dokument-Ready-Funktion handelt this
verweist auf Dokument http://jsfiddle.net/IrvinDominin/J2r5V/
In diesem Fall können Sie keine haben article
übergeordnetes Element des Dokuments, sodass Ihre Funktion den Fehler auslöst http://jsfiddle.net/IrvinDominin/J2r5V/1/.
Ich denke, du musst alles bekommen div
Elemente nach Ihren Bedürfnissen hinzufügen und für jedes von ihnen die aktuelle Funktion ausführen;im Kontext des jeweiligen this
wird das richtige Element sein.