अनक्रेड टाइप टाइप: अशिक्षित की संपत्ति 'शीर्ष' नहीं पढ़ सकता


91

अगर इस सवाल का जवाब पहले ही मिल गया है तो मैं माफी चाहता हूं। मैंने समाधान खोजने की कोशिश की है, लेकिन मेरे कोड के अनुकूल कोई भी नहीं मिला। मैं अभी भी jQuery के लिए नया हूँ।

मेरे पास दो अलग-अलग पन्नों के लिए दो अलग-अलग प्रकार के चिपचिपे मेनू हैं। यहाँ दोनों के लिए कोड है।

$(document).ready(function () {
    var contentNav = $('.content-nav').offset().top;
    var stickyNav = function () {
        var scrollTop = $(window).scrollTop();
        if (scrollTop > contentNav) {
            $('.content-nav').addClass('content-nav-sticky');
        } else {;
            $('.content-nav').removeClass('content-nav-sticky')
        }
    };
    stickyNav();
    $(window).scroll(function () {
        stickyNav();
    });
});
$(document).ready(function () {
    var stickyNavTop = $('.nav-map').offset().top;
    // var contentNav = $('.content-nav').offset().top;
    var stickyNav = function () {
        var scrollTop = $(window).scrollTop();
        if (scrollTop > stickyNavTop) {
            $('.nav-map').addClass('sticky');
            // $('.content-nav').addClass('sticky');
        } else {
            $('.nav-map').removeClass('sticky');
            // $('.content-nav').removeClass('sticky')
        }
    };
    stickyNav();
    $(window).scroll(function () {
        stickyNav();
    });
});

मेरी समस्या यह है कि तल पर चिपचिपा साइड मेनू के लिए कोड काम नहीं करता है क्योंकि कोड की दूसरी पंक्ति में var contentNav = $('.content-nav').offset().top;एक त्रुटि होती है जो "अनकवर्ड टाइपर्रर:" अपरिभाषित की संपत्ति 'शीर्ष' नहीं पढ़ सकती है। वास्तव में, उस दूसरी पंक्ति के नीचे कोई अन्य jQuery कोड तब तक काम नहीं करता है जब तक कि उन्हें इसके ऊपर नहीं रखा जाता है।

कुछ शोध के बाद, मुझे लगता है कि समस्या यह है $('.content-nav').offset().top निर्दिष्ट चयनकर्ता नहीं मिल सकता क्योंकि यह एक अलग पृष्ठ पर है। यदि हां, तो मुझे कोई समाधान नहीं मिल रहा है।


1
कृपया jsbin.com का उपयोग करें।
रॉय नमिर

html में जांच करें कि क्या तलाक मौजूद है या नहीं
भद्रा

जवाबों:


141

जाँच करें कि क्या jQuery ऑब्जेक्ट में कोई भी तत्व है इससे पहले कि आप इसकी भरपाई करने की कोशिश करें:

var nav = $('.content-nav');
if (nav.length) {
  var contentNav = nav.offset().top;
  ...continue to set up the menu
}

2
यह काम! और एक सरल उपाय क्या है। मेरे पास सीखने के लिए बहुत कुछ है। बहुत बहुत धन्यवाद।
edubba

हाँ यह मेरे लिए भी काम करता है। लेकिन var contentNav = $('.content-nav').offset().topआपके और आपके कोड में क्या अंतर है ?
प्रशांत तापसे

@Prashant: अंतर यह है कि कोड यह जाँचता है कि जिस तत्व को $('.content-nav')कॉल किया गया था उसकी संख्या पहले पाए गए तत्व की स्थिति प्राप्त करने से पहले गैर-शून्य थी या नहीं।
गुफा

1
stackoverflow.com/questions/28508939/… मेरे पास तालिका है, लेकिन मैं अभी भी त्रुटि प्राप्त कर रहा हूं।
SearchForKnowledge

@ Guffa धन्यवाद दोस्त! हालाँकि बस सोच रहा था ... मैं हमेशा एक तत्व था जो एक <हैडर> टैग था। अगर यह <div> या <शीर्ष लेख> है तो क्या इससे कोई फर्क पड़ेगा?
एंटोनियो अल्मेडा

17

आपका दस्तावेज़ वर्ग के साथ किसी भी तत्व को शामिल नहीं करता content-navहै, इस प्रकार विधि .offset()रिटर्न अपरिभाषित वास्तव में कोई है जो topसंपत्ति।

आप इस फिडेल में अपने लिए देख सकते हैं

alert($('.content-nav').offset());

(आप "अपरिभाषित" देखेंगे)

पूरे कोड को क्रैश होने से बचाने के लिए, आपके पास इस तरह का कोड हो सकता है:

var top = ($('.content-nav').offset() || { "top": NaN }).top;
if (isNaN(top)) {
    alert("something is wrong, no top");
} else {
    alert(top);
}

अपडेटेड फ़िडेल


1
इस उत्तर के लिए धन्यवाद, मुझे अलग समस्या है लेकिन यह पूरी तरह से काम कर रहा है
नवेद खान

12

मुझे पता है कि यह बहुत पुराना है, लेकिन मैं समझता हूं कि यह त्रुटि प्रकार शुरुआती लोगों के लिए एक सामान्य गलती है क्योंकि अधिकांश शुरुआती अपने हेडर तत्व को लोड किए जाने पर अपने कार्यों को कॉल करेंगे। यह देखते हुए कि इस समाधान को इस धागे में बिल्कुल भी संबोधित नहीं किया गया है, मैं इसे जोड़ूंगा। यह बहुत संभावना है कि यह जावास्क्रिप्ट फ़ंक्शन वास्तविक HTML लोड होने से पहले रखा गया था । याद रखें, यदि आप दस्तावेज़ तैयार होने से पहले तुरंत अपनी जावास्क्रिप्ट कहते हैं, तो दस्तावेज़ से एक तत्व की आवश्यकता वाले तत्वों को अपरिभाषित मान मिल सकता है।


$ (दस्तावेज़)। पहले से ही (फ़ंक्शन () {...}); दस्तावेज़ लोड होने पर आग लग जाती है और इससे कोई फ़र्क नहीं पड़ता कि स्क्रिप्ट कहाँ है। लेकिन आप इतने सही हैं कि इस आवरण के बिना कोई भी स्क्रिप्ट काम नहीं कर सकती है जब पृष्ठ के शीर्ष में नोट किया गया हो।
डेविड

11

आप जिस समस्या की सबसे अधिक संभावना है, वह यह है कि पेज में कहीं एक लिंक एक एंकर के लिए मौजूद है जो मौजूद नहीं है। उदाहरण के लिए, मान लें कि आपके पास निम्नलिखित हैं:

<a href="#examples">Skip to examples</a>

उस आईडी के साथ पृष्ठ में एक तत्व होना चाहिए, उदाहरण:

<div id="examples">Here are the examples</div>

इसलिए यह सुनिश्चित करें कि लिंक में से प्रत्येक एक पृष्ठ के अंदर मेल खाता है जिसके साथ यह संबंधित एंकर है।


3

मैं इसी तरह की समस्या से गुज़रा और मैंने पाया कि मैं पाद लेख की भरपाई करने की कोशिश कर रहा था, लेकिन मैं पाद लेख से पहले एक स्क्रिप्ट के अंदर अपनी स्क्रिप्ट लोड कर रहा था। यह कुछ इस तरह था:

<div> I have some contents </div>
<script>
  $('footer').offset().top;
</script>
<footer>This is footer</footer>

तो, समस्या यह थी, मैं पाद लेख लोड होने से पहले पाद लेख तत्व को बुला रहा था

मैंने पाद लेख के नीचे अपनी स्क्रिप्ट को धकेला और यह ठीक काम किया!


0

मेरे पास एक ही समस्या थी ("अनकैप्ड टाइपर्रर: अपरिभाषित की संपत्ति 'शीर्ष' नहीं पढ़ सकता")

मैंने हर वो उपाय आजमाया जो मुझे मिल सकता था और मदद करने पर ध्यान नहीं दिया। लेकिन तब मैंने देखा है कि मेरे DIV के पास दो आईडी हैं।

इसलिए, मैंने दूसरी आईडी निकाली और इसने काम किया।

मेरी इच्छा है कि किसी ने मुझसे कहा कि मैं पहले अपनी आईडी की जांच करूँ))

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.