تغییر ظاهر رادیو باتن

یک دکمه‌ی رادیویی که در حال آرایش کردن است

چند وقت پیش به درخواست یکی از مشتریان سارینا، صفحه فرمی را طراحی کردم، به گونه‌ای که کاربر پس از پر کردن تمامی فیلدها، می‌بایست بین دو گزینه (زن هستم) یا (مرد هستم) یکی را انتخاب می‌کرد. برای انتخاب یکی از گزینه‌ها نیاز بود تا از دکمه‌های رادیویی (Radio Button) استفاده کنم که این دکمه‌ها مانند تمام دکمه‌های رادیویی، طراحی رایج خود را داشتند.
radiobtn3
از نظر کاربردپذیری بهتر بود تا این گزینه‌ها شبیه دکمه باشند و کاربر بعد از انتخاب هر دکمه، آن را در حالت انتخاب شده ببیند.

radiobtn1

CSS لازم برای شبیه شدن گزینه‌ها به دکمه را نوشتم. برای حالت انتخاب شده‌ی دکمه‌ها نیز، طراحی که در نظر داشتم به گونه‌ای بود که با انتخاب هرکدام از گزینه‌ها، زمینه‌ی آن دکمه سفید و متن داخلش مشکی شود.

 

CSS زیر را با توجه به کلاس‌ دکمه‌ی رادیویی اینگونه نوشتم:

.input-box li.checked{ 
      background-color: #FFF;
      color: #000;
}

در این مرحله نیاز داشتم کلاس checked را به li بدهم تا CSS بالا روی دکمه‌ها اعمال شود تا با انتخاب هر گزینه توسط کاربر، کلاس checked به li آن گزینه اعمال و از li گزینه دیگر برداشته شود. برای انجام این کار لازم بود تا از کد جاوااسکریپت استفاده کنم.

<div class="input-box">
    <ul class="list-select">
        <li class="control ">
            <input style="float:left" type="radio" name="field[13]" id="field130" value="woman" class="radio ">
            <label for="field130" class="" style="">زن هستم</label>
        </li>
        <li class="control ">
            <input style="float:left" type="radio" name="field[13]" id="field131" value="man" class="radio ">
            <label for="field131" class="" style="">مرد هستم</label>
        </li>
    </ul>
</div>

بنابراین انتهای فایل phtml مربوط به دکمه‌های رادیویی، قطعه کد جاوااسکریپت زیر را اضافه کردم:

<script type="text/javascript">
    jQuery(function($) {
        jQuery('input[type=radio]').change(function() {
            if (jQuery(this).is(':checked')) {
                jQuery(this).parent().addClass('checked');
                jQuery('.list-select').find('input:not(:checked)').parent().removeClass('checked');
            }
        });
    });
</script>

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

<div class="input-box">
        <ul class="list-select">
               <li class="control  checked">
                   <input style="float:left" type="radio" name="field[13]" id="field130" value="woman" class="radio ">
                   <label for="field130" class="" style="">زن هستم</label>
               </li>
               <li class="control">
                     <input style="float:left" type="radio" name="field[13]" id="field131" value="man" class="radio ">
                    <label for="field131" class="" style="">مرد هستم</label>
                 </li>
          </ul>
</div>

radiobtn2

طراح رابط کاربری و گرافیست شرکت سارینا و همچنین عضو تیم فنی فروشگاه اینترنتی ورچین است. درحال حاضر در سارینا با Magento کار می‌کند. او لیسانس نرم افزار است و به نقاشی علاقه دارد.