ایجاد لیست کشویی (drop-down) وابسته به هم در HTML


نویسنده:
چهارشنبه ۱۱ مهر ۱۳۹۷
۲,۵۴۱ بازدید
لیست کشویی

در این مقاله قصد داریم یکی از مطالب بسیار مهم و کاربردی یعنی ایجاد لیست کشویی وابسته به هم در HTML که مربوط به مباحث برنامه نویسی سمت کاربر می‌شود را آموزش دهیم که بنده در سایت‌های فارسی، آموزش کاملی در این مورد پیدا نکردم.

ایجاد لیست کشویی وابسته به هم در HTML

خب حتماً در بسیاری از سایت‌ها (خصوصاً سایت‌های سازمانی) مشاهده کرده‌اید که چندین لیست کشویی، به هم وابسته هستند. برای مثال می‌توان به انتخاب استان و شهر اشاره کرد. اگر دقت کرده باشید در این مدل انتخاب‌ها چندین لیست کشویی (drop-down) که ما در زبان html با تگ select آنها را پیاده سازی می‌کنیم، وجود دارد که گزینه (option) آنها به انتخاب قبلی شما بستگی دارد.

نکته: در این مقاله هر جا گفته شد “لیست کشویی” بدانید که منظور همان drop-down در html است که با تگ select پیاده سازی می‌شود.

اگر در مورد همان انتخاب استان و شهر دقت کنیم، متوجه خواهیم شد که ابتدا باید استان موردنظر را از لیست کشویی اول انتخاب کنیم، و بعد شهرها در لیست کشویی دوم فعال می‌شوند و می‌توانیم شهر موردنظر هم انتخاب کنیم. (یعنی گزینه های لیست کشویی دوم که شهرها هستند به لیست کشویی اول که انتخاب استان است بستگی دارد، یا به عبارت دیگر وابسته است)

حالا سؤال اینجاست که این انتخاب‌ها چگونه کار می‌کنند و پیاده سازی می‌شوند؟ طبیعتاً از زبان html برای ایجاد لیست‌های کشویی مدنظرمان استفاده می‌کنیم (با استفاده از تگ select). سپس با استفاده از زبان شیرین جاوا اسکریپت تشخیص می‌دهیم که انتخاب اول کاربر چه گزینه‌ای هست و گزینه‌های مربوطه را در لیست کشویی بعدی ظاهر می‌کنیم.

خیلی نگران نباشید چون سعی کرده‌ایم به ساده‌ترین شکل ممکن کدها را نوشته و خط به خط توضیح دهیم (به غیر از اینکه در قسمت نظرات همین پست برای رفع مشکلات در خدمت شما هستیم!).

ایجاد select های وابسته به هم در HTML

توجه: در مثال زیر ما دو لیست کشویی داریم که در اولی سه مقدار Volvo، Volkswagen و BMW را قرار دادیم و کاربر وقتی هرکدام از این گزینه‌ها را انتخاب کند در لیست کشویی دوم چندین مدل از خودرو‌های آن شرکت ظاهر میشود.

قدم اول: ابتدا لیست های کشویی را مطابق کد زیر ایجاد می‌کنیم، دقت داشته باشید که فقط در select اول گزینه (option) وجود دارد و قرار است که در select دوم بسته به انتخاب شما در select اول گزینه‌ها بارگذاری شوند.

نکته: در select اول یک خصیصه به نام onchange وجود دارد که در واقع وقتی که کاربر گزینه‌ای را انتخاب می‌کند تابع درونش یعنی ()ChangeCarList که یک تابع جاوا اسکریپت هست فراخوانی می‌شود. (در ادامه متوجه خواهید شد که چرا این کار را انجام دادیم)

قدم دوم: حال باید کدهای جاوا اسکریپت را به کارمان اضافه کنیم. یعنی کدی که باعث وابستگی گزینه‌های select دوم به انتخاب کاربر در select اول می‌شود.


توضیح خط به خط کدهای بالا:

خط ۲ تا ۵: یک آرایه دو بعدی با نام carsAndModels تعریف می‌کنیم و کلید (key) هر خانه را برابر گزینه های select اول (نام کمپانی‌ها) قرار می‌دهیم و در مقدار (value) هر خانه مقادیری را که قصد داریم با انتخاب کلید (key) آن خانه در select اول، درون select دوم بارگذاری شوند را قرار می‌دهیم (مدل خودرو‌ها). (شاید برای افرادی که با جاوااسکریپت آشنایی ندارند درک کدهای بالا کمی سخت باشد ولی خب چاره‌ای نیست!)

خط ۷: تابعی که در خاصیت onchange لیست کشویی اول نوشتیم را اینجا تعریف می‌کنیم. در ادامه خواهیم گفت که درون این تابع چه خبر است!

خط ۸: لیست کشویی اول را انتخاب می‌کنیم و فعلاً داخل متغیر carList قرار می‌دهیم.

خط ۹: لیست کشویی دوم را انتخاب می‌کنیم و فعلاً داخل متغیر modelList قرار می‌دهیم.

خط ۱۰: مقدار گزینه‌ای که در حال حاضر در لیست کشویی اول (کمپانی‌ها) انتخاب شده را دریافت کرده و در متغیر selCar قرار می‌دهیم.

خط ۱۱ تا ۱۳: اگر از قبل گزینه‌ای داخل لیست کشویی دوم (مدل خودروها) قرار داشت، همه را حذف می‌کنیم.

خط ۱۴: مقادیر تعریف شده در خانه‌ی مربوط به گزینه انتخاب شده در لیست کشویی اول، را از آرایه carsAndModels می‌گیریم و در متغیر cars قرار می‌دهیم.

خط ۱۵: بررسی می‌کنیم که آیا گزینه‌ای برای این انتخاب تعریف شده یا خیر، اگر تعریف شده بود دستورات بعدی اجرا خواهند شد. (در واقع بررسی می‌شود که متغیر cars خالی نباشد)

خط ۱۶ تا ۲۰: با استفاده از یک حلقه for تمام مقادیری که از قبل در آرایه carsAndModels تعریف کرده بودیم را به‌صورت یک گزینه (option) در لیست کشویی دوم درج می‌کنیم و کاربر می‌تواند آنها را انتخاب کند.

نکته: می‌توانید بصورت آنلاین فرم بالا را از طریق کلیک روی دکمه زیر تست کنید و خودتان نتیجه را مشاهده کنید:

این آموزش هم به پایان رسید، امیدوارم کسانی که نیاز به این آموزش داشتند نهایت استفاده را برده باشند.

می‌توانید مشکلات خود را از طریق نظرات زیر همین آموزش مطرح کنید تا توسط ما یا دوستان دیگر پاسخ داده شوند.

منبع: w3schools.com

مطالب زیر را حتما بخوانید

آموزش افزودن نقشه گوگل در صفحات وب‌سایت

یکی از صفحات مهم هر وب‌سایت که معمولاً توسط مشتری‌ها بررسی می‌شود، صفحه‌ی تماس با ما است. قرار دادن اطلاعات...

انواع حوزه‌های برنامه‌نویسی را بشناسید

در این مقاله سعی کردیم به زبانی ساده به معرفی زبان‌های برنامه‌نویسی در حوزه‌های مختلف بپردازیم.

نحوه اشتراک گذاری مطالب وب‌سایت در شبکه‌های اجتماعی

بدون نیاز به افزونه فقط با یک قطعه کد، دکمه‌های اشتراک گذاری مطالب را در سایت خود فعال کنید.

جالب‌ترین کاربردهای زبان PHP که احتمالاً نمی‌دانید!

php فقط یک زبان برای طراحی سایت نیست. واقعیت این است که این زبان قدرتمند دارای کاربردهای زیادی است که...

۷ اشتباه رایج برنامه‌نویسان مبتدی و تازه‌کار

همه‌ی برنامه‌نویسان در ابتدای راه اشتباهاتی را انجام می دهند که معمولاً ادامه‌ی کار را برای خود سخت‌تر می‌کنند. رایج‌ترین...

آموزش ساخت سایدبار ثابت (fixed sidebar)

در این مقاله آموزش می‌دهیم که چگونه با روشی آسان کاری کنیم تا هنگامی که صفحه اسکرول می‌شود، سایدبار ثابت...

آموزش افزایش سرعت سایت

دوره آموزش افزایش سرعت وب‌سایت

مرورگر را باز می‌کنید و آدرس سایتتان را وارد می‌کنید. مرورگر شروع ...

دوره آموزش وردپرس فارسی

دوره آموزش وردپرس فارسی

در پکیج آموزش وردپرس فارسی یاد می‌گیرید که چطور از صفر و ...

دوره جامع آموزش سئو

دوره جامع آموزش سئو

دوره جامع آموزش سئو با هدف آموزش مفاهیم و ابزار‌های سئو به ...

دیدگاهتان را بنویسید

15 پاسخ به “ایجاد لیست کشویی (drop-down) وابسته به هم در HTML”

  1. رز گفت:

    با عرض سلام اگر هر دو لیست به صورت داینامیک و از دیتابیس پر شده باشند کد جاوا اسکریپت را چگونه باید بنویسیم
    ممنون

    • سلام دوست عزیز.
      برای این کار دو راه وجود داره:
      ۱- مقادیرو از دیتابیس بخونید (مثلا با php) بعد اونهارو دقیقا به همین صورت که در آموزش هست در یک آرایه جاوااسکریپت قرار بدید.
      ۲- فقط مقادیر select اول رو از دیتابیس بخونید، و بعد دقیقا وقتی کاربر یکی از گزینه‌ها رو انتخاب کرد با استفاده از جی کوئری مقادیر گزینه‌های select دوم رو از دیتابیس بخونید.

      بنده راه اول رو پیشنهاد می‌کنم. مگر در شرایط خاص.
      موفق باشید.

  2. امید گفت:

    بسم الله الرحمن الرحیم
    سلام علی جان و تشکر برای سایت آموزشی خوبت.
    اگر بخواهیم با کلیک در تگ select یک فرم باز بشود و یک لیست آکارئونی را از php در این فرم قرار دهیم چگونه باید این کار راانجام داد .

    • سلام دوست عزیز.
      منظورتون از فرم رو دقیق متوجه نشدم چون بعدش گفتید لیست آکاردیونی.
      چون گفتید php احتمالا اطلاعات داینامیکی در دیتابیس دارید که می‌خواید اونهارو لود کنید. اگر حجم اون اطلاعات زیاد نیست می‌تونید همون اول اطلاعات رو لود کنید و اون لیست رو hidden کنید و بعدش با استفاده از جاوااسکریپت تعریف کنید که وقتی روی تگ select عمل focus انجام شد اون لیست مد نظر شما رو نمایش بده.
      اما اگر حجم اطلاعات زیاد هستش باید دقیقا زمان focus شدن تگ select با استفاده از Ajax اطلاعات رو از دیتابیس یا هرجای دیگه با استفاده از php بخونیم و لود کنیم.
      موفق باشید

  3. علی گفت:

    به نام خدا

    سلام

    ممنون از مطالب مفیدترین

    میخواستم بپرسم که اگر بخواهیم کاربر بعد از انتخاب شهر،در مراجعه بعدی دوباره شهر رو انتخاب نکنه باید چکار کرد؟
    مثل سایت دیوار که در اولین بازدید شهر مورد نظر انتخاب میشه،مثلا تهران
    در مراجعه بعدی به سایت،دیگر نیازی به انتخاب نیست و سایت روی تهران تنظیم شده

  4. تابان اسکندری گفت:

    سلام ممنون از مطالب مفیدتون من میخوام مقدار value لیست دوم خودم تعیین کنم مثلا الان از صفر شروع میشه خودم تعیین کنم
    چطوری باید این کار رو بکنم

    • سلام دوست عزیز
      درحال حاضر هم خودتون مقادیر لیست دوم رو تعیین می‌کنید. به آرایه‌ای که در ابتدای کد جاوااسکریپت اومده دقت کنید.
      اگر منظورتون اینه که از دیتابیس اطلاعات رو بخونید و اطلاعات ممکنه داینامیک باشند باید از AJAX کمک بگیرید.

  5. محسن گفت:

    با سلام و خسته نباشید
    اگر بخواهیم بیش از 2 لیست وابسته داشته باشیم چطور میشه؟
    مثلا کشور ، استان ، شهر ، منطقه و …

    • سلام دوست عزیز
      یک تگ select دیگه ایجاد کنید و کد جاوااسکریپت رو باید دوبار بنویسید. یک بار برای زمانی که select اول انتخاب شد. و یک بار هم برای زمانی که select دوم انتخاب شد.

  6. asady گفت:

    با عرض سلام و خسته نباشید . لطفا بفرمایید برای اینکه کاربر بعد از انتخاب استان و شهر مورد نظر بلافاصله اطلاعات در مورد شهر انتخاب شده برایش با فشردن دکمه ای نمایان شود بر فرض مثال عکس های شهر مورد انتخاب برایش نمایش داده شود به چه صورت باید کد ها را نوشت و ارتباط برقرار کرد؟
    با تشکر

    • سلام دوست عزیز
      باید با استفاده از زبان سمت سرور (PHP یا ASP یا …) با پایگاه داده ارتباط برقرار کنید و مشخصات مدنظرتون رو طبق اطلاعات گرفته شده از فرم، از پایگاه داده استخراج کنید.
      اگر به زبان سمت سرور و کار با پایگاه داده مسلط نیستید اینکارو به یک برنامه نویس تحت وب بسپارید.
      موفق باشید.

  7. امین بهرامی گفت:

    سلام خسته نباشید
    برای ثبت نام در سایت لیست کشویی گذاشتن ولی قبل از انتخاب استان حتما باید روی لیست کشویی شهر کلیک کنیم ( که خالی هست) تا لیست کشویی استان فعال بشه بعد از انتخاب استان دوباره برگردیم و شهر رو انتخاب کنیم میشه راهنمایی بفرمایید چطور این مشکل برطرف میشه

    • سلام امین جان
      در حالت عادی نباید به اینصورتی که شما گفتی باشه. یقیناً کدی وجود داره که این مشکل رو ایجاد می‌کنه، اگر از همین کدی که براتون گذاشتم استفاده می‌کنید احتمالا در نام‌گذاری selectها و یا گرفتن select ها در جاوااسکریپت اشتباه شده، اگر هم کدی هستش که از قبل نوشته شده باید در کد‌های جاوااسکریپت بگردید و قسمتی که بدون هیچ رویدادی و در حالت عادی داره به select استان خصیصه disabled اضافه می‌کنه رو پیدا و حذف کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *