Пользовательские флажки для проверки формы - Magento


У меня есть 2 поля флажка, и только одно из них должно быть обязательным (первое или второе)

Как я могу показать сообщение об ошибке, только если 2 флажка не установлены.

Можно ли это сделать с прототипом? или мне нужно искать решение с помощью jQuery?

Редактировать: enter image description here

Пользователь должен выбрать один или несколько вариантов из "Группы флажков 1" или "Группы флажков 2", но не варианты из 2 групп. Только необходимо выбрать одну группу

Правка2: для информации я использую https://amasty.com/customer-attributes.html и я хочу настроить сгенерированную форму...

А вот сгенерированный код полей моей формы:

<fieldset id="amcustomerattr66" class="amcustomerattr">
<span class="field-row" id="checkbox_group1">
<label for="checkbox_group1">Checkbox group1</label><div style="clear: both;"></div>
<div class="amorderattr_img_checkbox" style="float: left; clear: none; padding-right: 4px;"><div><input type="checkbox" class="" name="billing[amcustomerattr][checkbox_group1][]" id="checkbox_group1___30" value="30">&nbsp;Option 1</div></div><div class="amorderattr_img_checkbox" style="float: left; clear: none; padding-right: 4px;"><div><input type="checkbox" class="" name="billing[amcustomerattr][checkbox_group1][]" id="checkbox_group1___31" value="31">&nbsp;Option 2</div></div><div class="amorderattr_img_checkbox" style="float: left; clear: none; padding-right: 4px;"><div><input type="checkbox" class="" name="billing[amcustomerattr][checkbox_group1][]" id="checkbox_group1___32" value="32">&nbsp;Option 3</div></div><input type="hidden" class="" name="amcustomerattr[checkbox_group1][]" id="checkbox_group1___0" value=""><div style="clear: both;"></div><div style="padding: 4px;"></div></span>
<script type="text/javascript">
   var checkbox_group1ElementControl = {
     selectAll: function() { 
         var sel = $("checkbox_group1");
         for(var i = 0; i < sel.options.length; i ++) { 
             sel.options[i].selected = true; 
         } 
         return false; 
     },
     deselectAll: function() {
         var sel = $("checkbox_group1");
         for(var i = 0; i < sel.options.length; i ++) { 
             sel.options[i].selected = false; 
         } 
         return false; 
     }
  }

</script><span class="field-row" id="checkbox_group2">
<label for="checkbox_group2">Checkbox group2</label><div style="clear: both;"></div>
<div class="amorderattr_img_checkbox" style="float: left; clear: none; padding-right: 4px;"><div><input type="checkbox" class="" name="billing[amcustomerattr][checkbox_group2][]" id="checkbox_group2___33" value="33">&nbsp;Option 4</div></div><div class="amorderattr_img_checkbox" style="float: left; clear: none; padding-right: 4px;"><div><input type="checkbox" class="" name="billing[amcustomerattr][checkbox_group2][]" id="checkbox_group2___34" value="34">&nbsp;Option 5</div></div><input type="hidden" class="" name="amcustomerattr[checkbox_group2][]" id="checkbox_group2___0" value=""><div style="clear: both;"></div><div style="padding: 4px;"></div></span>
<script type="text/javascript">
   var checkbox_group2ElementControl = {
     selectAll: function() { 
         var sel = $("checkbox_group2");
         for(var i = 0; i < sel.options.length; i ++) { 
             sel.options[i].selected = true; 
         } 
         return false; 
     },
     deselectAll: function() {
         var sel = $("checkbox_group2");
         for(var i = 0; i < sel.options.length; i ++) { 
             sel.options[i].selected = false; 
         } 
         return false; 
     }
  }

</script>







<script type="text/javascript">
   var fav_colorElementControl = {
     selectAll: function() { 
         var sel = $("fav_color");
         for(var i = 0; i < sel.options.length; i ++) { 
             sel.options[i].selected = true; 
         } 
         return false; 
     },
     deselectAll: function() {
         var sel = $("fav_color");
         for(var i = 0; i < sel.options.length; i ++) { 
             sel.options[i].selected = false; 
         } 
         return false; 
     }
  }

</script><span class="field-row" style="display: none;">
<label for="company_name">Name of the company</label><div style="clear: both;"></div>
<input id="company_name" name="billing[amcustomerattr][company_name]" value="" class=" input-text" type="text">
<div style="padding: 4px;"></div></span>
<span class="field-row" style="display: none;">
<label for="company_specialization">Company specialization</label><div style="clear: both;"></div>
<textarea id="company_specialization" name="billing[amcustomerattr][company_specialization]" class=" textarea" rows="2" cols="15"></textarea><div style="padding: 4px;"></div></span>
</fieldset>
Author: Bizboss, 2016-09-27

1 answers

Предположим, у вас есть два таких флажка:

<input type="checkbox" name="my_checkbox[1]" value="1" />
<input type="checkbox" name="my_checkbox[2]" value="2" />

Вы можете использовать класс по умолчанию validate-one-required-by-name, чтобы позволить проверке прототипа по умолчанию проверить один необходимый параметр:

<input type="checkbox" name="my_checkbox[1]" value="1" class="validate-one-required-by-name" />
<input type="checkbox" name="my_checkbox[2]" value="2" class="validate-one-required-by-name" />

Пожалуйста, обратите внимание, что имя ввода имеет важное значение. Имя должно быть массивом, как в моем примере, чтобы проверка работала правильно.

В вашем случае вам придется добавить этот класс к 5 входным данным.

Кроме того, для правильного использования проверки вам необходимо чтобы добавить этот маленький JS после вашей формы:

<script type="text/javascript">
//<![CDATA[
    var myCustomForm= new VarienForm('custom-form');
//]]>
</script>

Где custom-form - идентификатор вашего элемента <form>.

 3
Author: Raphael at Digital Pianism, 2016-09-30 07:40:11