آموزش ایجاد لیست کشویی وابسته به هم در HTML
در این مقاله در همیار من قصد داریم یکی از مطالب بسیار مهم و کاربردی یعنی ایجاد لیست کشویی وابسته به هم در HTML که مربوط به مباحث برنامه نویسی سمت کاربر میشود را آموزش دهیم که بنده در سایتهای فارسی، آموزش کاملی در این مورد پیدا نکردم.
ایجاد لیست کشویی وابسته به هم در HTML
خب حتماً در بسیاری از سایتها (خصوصاً سایتهای سازمانی) مشاهده کردهاید که چندین لیست کشویی، به هم وابسته هستند. برای مثال میتوان به انتخاب استان و شهر اشاره کرد. اگر دقت کرده باشید در این مدل انتخابها چندین لیست کشویی (drop-down) که ما در زبان html با تگ select آنها را پیاده سازی میکنیم، وجود دارد که گزینه (option) آنها به انتخاب قبلی شما بستگی دارد.
نکته: در این مقاله هر جا گفته شد “لیست کشویی” بدانید که منظور همان drop-down در html است که با تگ select پیاده سازی میشود.
اگر در مورد همان انتخاب استان و شهر دقت کنیم، متوجه خواهیم شد که ابتدا باید استان موردنظر را از لیست کشویی اول انتخاب کنیم، و بعد شهرها در لیست کشویی دوم فعال میشوند و میتوانیم شهر موردنظر هم انتخاب کنیم. (یعنی گزینه های لیست کشویی دوم که شهرها هستند به لیست کشویی اول که انتخاب استان است بستگی دارد، یا به عبارت دیگر وابسته است)
حالا سؤال اینجاست که این انتخابها چگونه کار میکنند و پیاده سازی میشوند؟ طبیعتاً از زبان html برای ایجاد لیستهای کشویی مدنظرمان استفاده میکنیم (با استفاده از تگ select). سپس با استفاده از زبان شیرین جاوا اسکریپت تشخیص میدهیم که انتخاب اول کاربر چه گزینهای هست و گزینههای مربوطه را در لیست کشویی بعدی ظاهر میکنیم.
خیلی نگران نباشید چون سعی کردهایم به سادهترین شکل ممکن کدها را نوشته و خط به خط توضیح دهیم (به غیر از اینکه در قسمت نظرات همین پست برای رفع مشکلات در خدمت شما هستیم!).
ایجاد select های وابسته به هم در HTML
توجه: در مثال زیر ما دو لیست کشویی داریم که در اولی سه مقدار Volvo، Volkswagen و BMW را قرار دادیم و کاربر وقتی هرکدام از این گزینهها را انتخاب کند در لیست کشویی دوم چندین مدل از خودروهای آن شرکت ظاهر میشود.
قدم اول: ابتدا لیست های کشویی را مطابق کد زیر ایجاد میکنیم، دقت داشته باشید که فقط در select اول گزینه (option) وجود دارد و قرار است که در select دوم بسته به انتخاب شما در select اول گزینهها بارگذاری شوند.
1 2 3 4 5 6 7 8 |
<select id="car" onchange="ChangeCarList()"> <option value="">-- Car --</option> <option value="VO">Volvo</option> <option value="VW">Volkswagen</option> <option value="BMW">BMW</option> </select> <select id="carmodel"></select> |
نکته: در select اول یک خصیصه به نام onchange وجود دارد که در واقع وقتی که کاربر گزینهای را انتخاب میکند تابع درونش یعنی ()ChangeCarList که یک تابع جاوا اسکریپت هست فراخوانی میشود. (در ادامه متوجه خواهید شد که چرا این کار را انجام دادیم)
قدم دوم: حال باید کدهای جاوا اسکریپت را به کارمان اضافه کنیم. یعنی کدی که باعث وابستگی گزینههای select دوم به انتخاب کاربر در select اول میشود.
شاید این مطالب را دوست داشته باشید:
- ساخت اسلایدر در بوتاسترپ ۴
- راهنمای قرار دادن نقشه گوگل در سایت
- آموزش کار با کلاسهای کمکی Utility Classes در بوتاسترپ 4
- آموزش کار با ستون ها در CSS3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<script> var carsAndModels = {}; carsAndModels['VO'] = ['V70', 'XC60', 'XC90']; carsAndModels['VW'] = ['Golf', 'Polo', 'Scirocco', 'Touareg']; carsAndModels['BMW'] = ['M6', 'X5', 'Z3']; function ChangeCarList() { var carList = document.getElementById("car"); var modelList = document.getElementById("carmodel"); var selCar = carList.options[carList.selectedIndex].value; while (modelList.options.length) { modelList.remove(0); } var cars = carsAndModels[selCar]; if (cars) { var i; for (i = 0; i < cars.length; i++) { var car = new Option(cars[i], i); modelList.options.add(car); } } } </script> |
توضیح خط به خط کدهای بالا:
خط ۲ تا ۵: یک آرایه دو بعدی با نام carsAndModels تعریف میکنیم و کلید (key) هر خانه را برابر گزینه های select اول (نام کمپانیها) قرار میدهیم و در مقدار (value) هر خانه مقادیری را که قصد داریم با انتخاب کلید (key) آن خانه در select اول، درون select دوم بارگذاری شوند را قرار میدهیم (مدل خودروها). (شاید برای افرادی که با جاوااسکریپت آشنایی ندارند درک کدهای بالا کمی سخت باشد ولی خب چارهای نیست!)
خط ۷: تابعی که در خاصیت onchange لیست کشویی اول نوشتیم را اینجا تعریف میکنیم. در ادامه خواهیم گفت که درون این تابع چه خبر است!
خط ۸: لیست کشویی اول را انتخاب میکنیم و فعلاً داخل متغیر carList قرار میدهیم.
خط ۹: لیست کشویی دوم را انتخاب میکنیم و فعلاً داخل متغیر modelList قرار میدهیم.
خط ۱۰: مقدار گزینهای که در حال حاضر در لیست کشویی اول (کمپانیها) انتخاب شده را دریافت کرده و در متغیر selCar قرار میدهیم.
خط ۱۱ تا ۱۳: اگر از قبل گزینهای داخل لیست کشویی دوم (مدل خودروها) قرار داشت، همه را حذف میکنیم.
خط ۱۴: مقادیر تعریف شده در خانهی مربوط به گزینه انتخاب شده در لیست کشویی اول، را از آرایه carsAndModels میگیریم و در متغیر cars قرار میدهیم.
خط ۱۵: بررسی میکنیم که آیا گزینهای برای این انتخاب تعریف شده یا خیر، اگر تعریف شده بود دستورات بعدی اجرا خواهند شد. (در واقع بررسی میشود که متغیر cars خالی نباشد)
خط ۱۶ تا ۲۰: با استفاده از یک حلقه for تمام مقادیری که از قبل در آرایه carsAndModels تعریف کرده بودیم را بهصورت یک گزینه (option) در لیست کشویی دوم درج میکنیم و کاربر میتواند آنها را انتخاب کند.
دیدگاهتان را بنویسید