Chrome / jQuery আনকচড রেঞ্জের ত্রুটি: সর্বাধিক কল স্ট্যাকের আকার অতিক্রম করেছে


113

আমি ক্রোমে "আনচড রেঞ্জেরর: সর্বোচ্চ কল স্ট্যাকের আকার ছাড়িয়েছি" ত্রুটি পাচ্ছি। এখানে আমার jQuery ফাংশন

$('td').click(function () {
        if ($(this).context.id != null && $(this).context.id != '') {
            foo($('#docId').val(), $(this).attr('id'));
        }
        return false;
    });

নোট করুন যে পৃষ্ঠায় হাজার হাজার ঘর রয়েছে। তবে আমি সাধারনত স্ট্যাকের ওভারফ্লোগুলিকে পুনরাবৃত্তির সাথে যুক্ত করি এবং এই ক্ষেত্রে যতদূর আমি দেখতে পাচ্ছি কিছুই নেই।

এই জাতীয় ল্যাম্বদা তৈরি করা কি স্বয়ংক্রিয়ভাবে স্ট্যাকের প্রচুর পরিমাণে স্টাফ তৈরি করে? এটি কোন রাস্তা আছে?

এই মুহূর্তে আমার কাছে কেবলমাত্র কাজটিই হ'ল এইচটিএমএল রেন্ডার করার সময় প্রতিটি কক্ষে স্পষ্টভাবে অনক্লিক ইভেন্টগুলি তৈরি করা যা এইচটিএমএলকে আরও বড় করে তোলে।


2
আপনি কি নিশ্চিতরূপে foo ফাংশনটি পুনরাবৃত্তি হয় না? আপনি যদি সেই ফাংশন কলটি সরিয়ে দেন তবে ত্রুটিটি এখনও ঘটবে?
sth

1
এটি অন্যান্য ব্রাউজারগুলিতে প্রত্যাশার মতো কাজ করে? আপনি যখন foo($('#docId').val(), $(this).attr('id'));লাইনটি মন্তব্য করেন তখন কি এই ত্রুটি ঘটে ? - অতিরিক্ত পারফরম্যান্স টিপ: নির্বাচকদের ফলাফলকে ক্যাশে করুন - উদাহরণস্বরূপ ফলাফলটি $(this)একটি পরিবর্তনশীল হিসাবে রাখুন এবং এটি আপনার হ্যান্ডেলারে প্রয়োজনমতো ব্যবহারের চেয়ে বেশি রাখুন।
WTK

আমার একই রকম সমস্যা আছে তবে মাউসেন্টার ইভেন্টগুলি দরকার। বডি বা টেবিল ব্যবহার করার সময় আমি পর্যাপ্ত ইভেন্টগুলি পাই না।
এরিক্সলা

উত্তর:


133

"পৃষ্ঠাটিতে কয়েক হাজার ঘর রয়েছে" হিসাবে ক্লিকের ইভেন্টটিকে প্রতিটি একক কক্ষে বাঁধাই একটি ভয়াবহ কর্মক্ষমতা সমস্যার কারণ হতে পারে। এটি করার আরও একটি ভাল উপায় আছে, এটি একটি ক্লিক ইভেন্টের শরীরে আবদ্ধ করা এবং তারপরে কোষের উপাদানটি ক্লিকের লক্ষ্য ছিল কিনা তা খুঁজে বের করা। এটার মত:

$('body').click(function(e){
       var Elem = e.target;
       if (Elem.nodeName=='td'){
           //.... your business goes here....
           // remember to replace $(this) with $(Elem)
       }
})

এই পদ্ধতিটি আপনার কাজটি কেবল স্থানীয় "টিডি" ট্যাগ দিয়েই করবে না তবে পরে যুক্ত "টিডি" দিয়েও। আমি মনে করি আপনি ইভেন্ট বন্ডিং এবং প্রতিনিধি সম্পর্কে এই নিবন্ধে আগ্রহী হবেন


অথবা আপনি একইভাবে jQuery এর " .on () " পদ্ধতিটি ব্যবহার করতে পারেন :

$('body').on('click', 'td', function(){
        ...
});

ধন্যবাদ, আমরা যাই হোক না কেন এটিতে পারফরম্যান্সের জন্য লড়াই করছি, সুতরাং এটি দুর্দান্ত ধারণা :-)
অ্যান্ডি

60
নুও,। লাইভ () ব্যবহার করবেন না !!! bitovi.com/blog/2011/04/… আপনার jQuery যথেষ্ট নতুন হলে একটি .delegate () (বা .on () ব্যবহার করুন), এবং পুরো ডকুমেন্টের চেয়ে টেবিল স্তর থেকে প্রতিনিধি দিন। এটি কেবলমাত্র লাইভ () ব্যবহারের চেয়ে আপনার পারফরম্যান্সকে আরও উন্নত করবে, যা মূলত পুরো ডকুমেন্ট থেকে কেবল ডেলিগেট করবে।
ব্র্যান্ডউইচল

19
এবং .live jQuery 1.9
cpuguy83

37

আপনার যখন অসীম লুপ থাকে তখন আপনি এই ত্রুটিটি পেতে পারেন। নিশ্চিত হয়ে নিন যে আপনার কোনও অনাদায়ী, পুনরাবৃত্তির স্ব-রেফারেন্স নেই।


6
এটি আমার সমস্যা সমাধান করেছে। আমি একটি ছিল <a id="linkDrink" onclick="drinkBeer();">Drink</a>A, এবং $('#linkDrink').click();মধ্যে drinkBeer()
আইকান ইয়াত

7

আমার আরও ভুল ছিল, লুপ ক্লিক (যা আমার অনুমান) মূলত লগইনে ক্লিক করে পিতামাতাকেও ক্লিক করা হয়েছিল যা শেষ পর্যন্ত সর্বাধিক কল স্ট্যাকের আকার অতিক্রম করেছে।

$('.clickhere').click(function(){
   $('.login').click();
});

<li class="clickhere">
  <a href="#" class="login">login</a>
</li>

3

এই সমস্যাটি আমার সাথে ঘটেছিল যখন আমি ওয়েবসাইটের অভ্যন্তরে আরও অনেক জিকুয়েরি প্লাগইনগুলির সাথে জ্যাকুয়ারি ফেন্সিবক্স ব্যবহার করি। আমি যখন ফেন্সিবক্সের পরিবর্তে লাইটবক্স ( এখানে সাইট ) ব্যবহার করি তখন সমস্যাটি চলে যায়।


1

ইউ ব্যবহার করতে পারেন

  $(document).on('click','p.class',function(e){
   e.preventDefault();
      //Code 
   });

0

আমি সম্প্রতি ঠিক এই সমস্যাটি মধ্যে দৌড়ে। আমার ডায়ালগ ডিভিউতে একটি খুব বড় টেবিল ছিল। এটি 15,000 সারি ছিল। যখন ডায়ালগ ডিভিতে .empty () ডাকা হয়েছিল তখন আমি উপরে ত্রুটি পেয়ে যাচ্ছিলাম।

আমি একটি চারপাশের সমাধান পেয়েছি যেখানে ডায়লগ বক্সটি পরিষ্কার করার আগে আমি খুব বড় টেবিল থেকে অন্য প্রতিটি সারি সরিয়ে ফেলতাম, তারপরে .empty () কল করতাম। দেখে মনে হয়েছে এটি কাজ করেছে। দেখে মনে হচ্ছে আমার জিকুয়ের পুরানো সংস্করণ এত বড় উপাদান হ্যান্ডেল করতে পারে না।

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