یه اتفاق عجیب

نوشته شده توسط بهنامی در ۲۶ اردیبهشت ۱۳۹۳

دیروز تو شرکت مشغول کار بودم  یه بخشی از وب سایت رو مورد بررسی قرار میدادم فایرباگ هم باز بود یهو متوجه یه قضیه عجیب شدم تو وب سایتم

من تو صفحه ام ۲ تا لیست باز شونده یا همون کمبو باکس داشتم که کمبو اولی موجب تغییر کمبو دوم میشد و کمبو دوم هم موجب تغییر داده های نمایش داده شده در Grid  صفحه میشد …

من متوجه شدم که تابع بارگزاری داده های از سرور برای Grid دو بار اجرا میشه خیلی تعجب کردم کل کد هامو بالا پایین کردم دیدم فقط یک بار فراخوانی کردمش بعد یکم بررسی دقیق تر متوجه شدم که هر چند بار کمبو اولی رو تغییر بدم به همون تعداد تابع بارگزاری Grid فراخوانی میشه

حالا قضیه چی بود ؟؟؟

وقتی یه تابع رو به یه Event یه آبجکت نسبت مییدیم مثلا change یا Click و در داخل اون تابع اختصاص داده شده به یه Event  یه آبجکت دیگه یه تابعی رو اختصاص میدیم اون تابع دوم به تعداد تغییر های Event اولی اختصاص داده میشه یکم گنگ شد جمله هام بزارید با یه مثال کامل توضیح بدم

من تو Change  کمبو اولی نوشته بودم که کمبو دومی رو ست بکن و تو تابع ست کردن کمبو دومی نوشته بودم Grid رو هم بارگزاری بکن

اتفاقی که میافتاد این بود : تابع هایی که به Event ها نسبت داده میشن هر چند بار نسبت داده بشن همون تعداد اجرا میشن

مثلا اگه من کمبو اولی رو ۱۰ بار مقدارشو تغییر میدادم ۱۰ بار تابع ست کردن Grid به کمبو دوم اختصاص داده میشد و وقتی کمبو دومی رو تغییر میدادم ۱۰ بار Grid ست میشد

خب این اتفاق بعضی وقتا خوبه بعضی وقتا بد باید بدونیم کی از این قضیه به نقع خودمون استفاده کنیم

راه مقابله با این اتفاق اینه که قبل از اختصاص تابع به event همه تابع های اختصاص داده شده رو از بین ببریم و بعد تابع جدید رو اختصاص بدیم

این کار تو جی کوئری با این دستور انجام میشود

$( “#foo”).unbind( “click” );

شاید من اونطور باید و شاید نتونستم توضیح بدم این قضیه رو از لینک زیر میتونید کامل مطالعه بکنید نحوه استفاده از این دستور رو …

استفاده از تابع unbind

امید وارم که مفید بوده باشه این مطلب  برای خود من که خیلی جالب بود گفتم باهاتون شریک بشم این مطلب رو

بدون دیدگاه دسته‌بندی : جی کوئری

دیدگاه‌تان را ارسال کنید ...