В общем всю эту хрень, имеется ввиду подход связывания элементов на странице с товарами на сервере, в помойку. У вас как разработчика вообще не должна болеть голова какую циферку приляпать к имени класса или идентификатора, и нужно ли вообще такой дурью маяться.
Товары на сервере должны храниться под уникальным значением, что это может быть уже говорилось. Товары на страницу сервер выводит в цикле, где сразу и связывает по этому уникальному значению необходимые для него и работы на клиенте элементы на странице. Название товара никак не может служить в качестве уникального значения, хотя бы уже потому, что нужно учитывать "человеческий фактор", то есть невольные и возможные ошибки со стороны администратора. Самое простое, это автоматическое формирование уникального ID непосредственно базой данных, начиная от 1. Элементы полей формы могут находится даже вне ее, но связаны с ней атрибутом form. Это означает, что группы радио кнопок при выводе сразу уже могут быть описаны как принадлежащие своей форме, которой даже не существует на странице, и которая добавляется на нее динамически. Пусть в базе имеется две пиццы под идентификаторами 23 и 17. Для того чтобы получить на сервере что выбрал клиент, нужно всего лишь связать по этим идентификаторам радио кнопки и их формы. Все, кучи абстрактных циферок втыкаемых везде по всей странице совсем не нужно. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script> $(function() { $('button.order').click(function() { $('<form id=' + $(this).data('form') + '><input value="' + $(this).parent().find('h4').text() + '"><button>Заказать</button></form>').appendTo('body').submit(function(e) { e.preventDefault(); alert(JSON.stringify($(this).serializeArray())) $(this).remove() }) }) }); </script> </head> <body> <div> <h4>Пицца с сыром</h4> <label><input form="23" type="radio" name="size[23]" value="1" checked="" /> 23 см</label> <label><input form="23" type="radio" name="size[23]" value="2" /> 30 см</label> <label><input form="23" type="radio" name="size[23]" value="3" /> 36 см</label> <button class="order" data-form="23">Заказать</button> </div> <div> <h4>Пицца без сыра</h4> <label><input form="17" type="radio" name="size[17]" value="1" checked="" /> 23 см</label> <label><input form="17" type="radio" name="size[17]" value="2" /> 30 см</label> <label><input form="17" type="radio" name="size[17]" value="3" /> 36 см</label> <button class="order" data-form="17">Заказать</button> </div> </body> </html> Как видим наличия скрытых полей в форме для передачи выбора совсем не требуется, вся информация нужная серверу передается самими кнопками. Сервер получит массив size, в котором ключ будет идентификатором товара, по которому легко проверить действительно ли это товар, а значением его характеристика, которую также легко проверить. Если запрос в базу по этим параметрам вернул и название пиццы, и ее размер, значит заказ не фейковый, по крайней мере на 20%. А вот название пиццы в форме, если уж так хочется выводить, то полем без имени, только для информации пользователю. На сервер же оно не передается, ибо оно ему совсем не требуется. |
Спасибо за столь развернутый ответ ))
у меня заработал такой скрипт: $(".radio_wrapper").on("change", function() { $("#value_product_2").val($(this).find("input[type=radio]:checked").attr("value")); }); |
Как об стену горохом.
|
Часовой пояс GMT +3, время: 15:32. |