আনকাচড টাইপ এরির: অপরিজ্ঞাতকৃত সম্পত্তি 'শীর্ষ' পড়তে পারে না


94

এই প্রশ্নের ইতিমধ্যে উত্তর দেওয়া থাকলে আমি ক্ষমা চাই। আমি সমাধানগুলি অনুসন্ধান করার চেষ্টা করেছি কিন্তু আমার কোডের সাথে উপযুক্ত কোনও খুঁজে পেলাম না। আমি এখনও 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;এমন একটি ত্রুটি ফেলা হয় যা "আনকড টাইপ এরিয়ার: অপরিশোধিত সম্পত্তি 'শীর্ষে' পড়তে পারে না reads প্রকৃতপক্ষে, দ্বিতীয় লাইনের নীচে অন্য কোনও jQuery কোড যদি এগুলির উপরে না থাকে তবে এগুলি কাজ করে না।

কিছু গবেষণা করার পরে, আমি মনে করি যে সমস্যাটি $('.content-nav').offset().topনির্দিষ্ট নির্বাচককে খুঁজে পাচ্ছে না কারণ এটি ভিন্ন পৃষ্ঠায় রয়েছে। যদি তা হয় তবে আমি কোনও সমাধান খুঁজে পাচ্ছি না।


4
দয়া করে jsbin.com ব্যবহার করুন।
রই নমির

এইচটিএমএল পরীক্ষা করুন যে ডিভটি উপস্থিত রয়েছে কি না
ভাদ্র

উত্তর:


146

আপনি অফসেট পাওয়ার চেষ্টা করার আগে jQuery অবজেক্টে কোনও উপাদান রয়েছে কিনা তা পরীক্ষা করুন:

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

4
এইটা কাজ করে! এবং কি একটি সহজ সমাধান। আমার আরও অনেক কিছু শেখার আছে। একটি গুচ্ছ ধন্যবাদ।
এডুব্বা

হ্যাঁ এটি আমার জন্যও কাজ করে। কিন্তু var contentNav = $('.content-nav').offset().topআপনার কোডের মধ্যে পার্থক্য কী ?
প্রশান্ত তাপসে

@ প্রশান্ত: পার্থক্যটি হ'ল কোডটি চেক করে যে $('.content-nav')কলটি যে উপাদানগুলির সংখ্যা খুঁজে পেয়েছিল তা প্রথম উপাদানটির অবস্থান পাওয়ার চেষ্টা করার আগে শূন্য ছিল না।
গুফা

4
stackoverflow.com/questions/28508939/… আমার কাছে টেবিল রয়েছে তবে আমি এখনও ত্রুটিটি পাচ্ছি।
ফরজজ্ঞান

@ গুফা ধন্যবাদ সাথী! তবে কেবল ভাবছি ... আমার কাছে সর্বদা উপাদানটি ছিল যা <শিরোনাম> ট্যাগ ছিল। এটি যদি <ডিভ> বা <শিরোনাম> হয় তবে তা কি ব্যাপার?
আন্তোনিও আলমেডা

17

আপনার দস্তাবেজ বর্গ সঙ্গে কোনো উপাদান নেই content-nav, এইভাবে পদ্ধতি .offset()আয় undefined প্রকৃতপক্ষে কোন যা 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);
}

বেহালার Updated


4
এই উত্তরের জন্য আপনাকে ধন্যবাদ, আমার আলাদা সমস্যা আছে তবে এটি পুরোপুরি কাজ করছে
নাভেদ খান

12

আমি জানি এটি অত্যন্ত পুরানো, তবে আমি বুঝতে পারি যে এই ত্রুটি টাইপটি প্রাথমিকভাবে করা সাধারণদের ভুল কারণ যেহেতু বেশিরভাগ সূচনাপ্রাপ্ত লোকেরা তাদের শিরোনাম উপাদান লোড হওয়ার সাথে সাথে তাদের ফাংশনগুলি কল করে। এই থ্রেডটিতে এই সমাধানটি মোটেও সম্বোধন করা হয়নি বলে আমি এটি যুক্ত করব। এটি খুব সম্ভবত এই জাভাস্ক্রিপ্ট ফাংশনটি প্রকৃত এইচটিএমএল লোড হওয়ার আগে স্থাপন করা হয়েছিল । মনে রাখবেন, ডকুমেন্টটি প্রস্তুত হওয়ার আগে আপনি যদি আপনার জাভাস্ক্রিপ্টটি তাত্ক্ষণিকভাবে কল করেন তবে ডকুমেন্টের উপাদানগুলির জন্য প্রয়োজনীয় উপাদানগুলি একটি অপরিবর্তিত মান খুঁজে পেতে পারে।


$ (ডকুমেন্ট) .ডিডি (ফাংশন () {...}); দস্তাবেজটি লোড হয়ে গেলে আগুন জ্বলে ওঠে এবং স্ক্রিপ্টটি কোথায় থাকে তা বিবেচনা করে না। তবে আপনি এখন পর্যন্ত ঠিক বলেছেন যে পৃষ্ঠার শীর্ষে উল্লিখিত হলে এই মোড়ক ছাড়া কোনও স্ক্রিপ্ট কাজ নাও করতে পারে।
ডেভিড

12

আপনি সম্ভবত যে সমস্যাটি দেখাচ্ছেন তা হ'ল পৃষ্ঠার কোথাও কোনও অ্যাঙ্করের লিঙ্ক রয়েছে যা বিদ্যমান নেই। উদাহরণস্বরূপ, আসুন আপনাকে নিম্নলিখিতগুলি বলুন:

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

সেই আইডি সহ পৃষ্ঠাতে একটি উপাদান থাকতে হবে, উদাহরণস্বরূপ:

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

সুতরাং নিশ্চিত হয়ে নিন যে লিঙ্কগুলির প্রত্যেকটিই এটির সাথে সম্পর্কিত অ্যাঙ্কারের সাথে পৃষ্ঠার ভিতরে মিলছে mat


3

আমি অনুরূপ সমস্যার মধ্য দিয়ে দৌড়ে গিয়েছিলাম এবং দেখতে পেয়েছি যে আমি ফুটারের অফসেট পাওয়ার চেষ্টা করছি তবে আমি আমার স্ক্রিপ্টটি ফুটারের আগে একটি ডিভের মধ্যে লোড করছি। এটি এমন কিছু ছিল:

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

সুতরাং, সমস্যাটি ছিল, আমি ফুটারটি লোড হওয়ার আগেই ফুটার এলিমেন্টটি কল করছিলাম

আমি আমার স্ক্রিপ্টটিকে পাদলেখার নীচে ফেলেছি এবং এটি দুর্দান্ত কাজ করেছে!


0

আমারও একই সমস্যা ছিল ("আনকচড টাইপ এয়ারার: ​​অপরিজ্ঞাতকৃত শীর্ষস্থানীয় 'শীর্ষকটি পড়তে পারে না))

আমি খুঁজে পেতে পারে এবং সমাধানে সহায়তা করার জন্য প্রতিটি সমাধান চেষ্টা করেছি। তবে আমি স্পষ্ট করেছিলাম যে আমার ডিআইভির দুটি আইডি ছিল।

সুতরাং, আমি দ্বিতীয় আইডি সরিয়েছি এবং এটি কার্যকর হয়েছে।

আমি কেবল ইচ্ছুক যে কেউ আমাকে আগে আমার আইডি পরীক্ষা করতে বলেছে))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.