ورود

نسخه کامل مشاهده نسخه کامل : مشکل با event ها



shahab.mos
20-10-2010, 15:25
با سلام .
من با نسبت دادن event ها به DOM Objects مشکل دارم .
قطعه قطعه کد ها را تست کردم، تا مشکلی از نظر scope,null & undefined objects,... نداشته باشند .
کد ها را تا جایی که ممکن بود ساده کردم ، تا جایی که به test تبدیل شدند .
از jslint.com, firebug برای پیدا کردن error ها استفاده کردم.
به جای کدهای native از کتابخانه jQuery و prototype استفاده کردم .

نتیجه اینکه کدهای اصلی هیچ مشکلی ندارند و با inline script کار میکنند ،مانند این:
[
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اما از هر روشی برای نسبت دادن event استفاده میکنم، بی اثر است. :19:
مانند این :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

وقتی event را به این ترتیب نسبت میدهم ، هنگام load صفحه ،event بدون نیاز به کلیک یا mouseover یا هر کار دیگر اجرا میشود ، ولی پس از آن دیگر نه ...
من از چند روش
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده کرده ام .
(واضح است اسکریپت ها بر localhost اجرا میشوند . )

neopersia
21-10-2010, 15:14
آیا تابع getElementByClassName رو قبلاً تعریف کردید؟ چون همچین تابعی فکر نمیکنم اصلاً وجود داشته باشه!
اونی که هست متد getElementsByClassName هست که میتونید روی نودها اجرا کنید. در ضمن این متد هم یک المنت رو برنمیگردونه که بتونید مستقیماً رویداد رو بهش وصل کنید. بلکه یک آرایه برمیگردونه که باید بزارید توی حلقه تا رویدادها رو بهش وصل کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته توی این کد که نوشتم رویداد اتچ نمیشه بلکه به طور کامل ریپلیس میشه.

اتچ کردن رویدادها با جاوا اسکرپت یه مقدار مشکل کراس براوزر ایجاد میکنه بنابراین باید دو سه تا کد بنویسید که همه مرورگرها رو پشتیبانی کنه. اما بیشتر فریمورکها این مشکل رو در نظر گرفتند و کار رو ساده کردند. مثلاً با کتابخانه مورد علاقه من dojo اینجوری میشه :دی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

من jQuery استفاده نمیکنم سینتکسش دقیق یادم نیست (مطمئن هم نیستم که اتچ میکنه یا ریپلیس) اما فکر میکنم با جی کوئری هم اینطوری بتونید همین کار رو انجام بدید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این قسمت در کد شما اشتباه هست:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به این دلیل که باید هندل تابع رو پاس بدید به رویداد اما در کد شما مقدار بازگشتی از تابع پاس داده میشه. درستش اینه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

وقتی که به صورت ()bar بنویسید، اسکرپت تابع bar رو اجرا میکنه و نتیجه رو ذخیره میکنه در حالی که باید تابع رو ذخیره کنه و در هنگام فراخوانی رویداد اجرا کنه

shahab.mos
25-10-2010, 10:23
سلام.
از راهنماییتان متشکرم. :7:
مشکل من دقیقا همین بود .
به همین دلیل با لود شدن صفحه ، event اجرا میشد به جای نسبت داده شدن.

Dope.getElementByClass را تعریف کرده ام ، تنها یک نتیجه دارد.