Создание поля ввода динамически с использованием других значений ввода
У меня есть HTML-форма с несколькими полями ввода и очень специальное поле ввода с именем " custom_1 ".
При отправке формы (до или перед) все значения в других полях ввода должны быть преобразованы в объект JSON и установлены в качестве значения custom_1.
Если значения предопределены, следующий код может сделать то, что я ожидаю.
<?php
$json = array(
'first_name' => 1,
'last_name' => 1,
'gender' => 1,
'email' => 'myemail@gmail.com',
'phone' => 345345431,
'telephone' => '035w34538',
'address' => 1,
'country' => 1,
'city' => 1,
'postal_code' => 1,
'dob' => '3333-03-03',
'nic' => '333333333V',
'course_provider' => 1,
'course' => 1,
'postal_code' => 10012
);
$custom_values = base64_encode(json_encode($json));
?>
<input type="hidden" name="custom_1" value="<?php echo $custom_values; ?>">
Но проблема в том, что этот массив должен быть создан и назначить значение для поля custom_1 при отправке формы. Это означает, что значения не предопределены, и они должны быть взяты из других полей ввода в форме.
Отправка формы и получение отдельных параметров сообщения не то, что я ожидаю. Все параметры должны быть приняты в custom_1, как описано выше.
Это просто с помощью jquery (конечно, вы можете использовать любую другую библиотеку)
Вот небольшой фрагмент кода:
https://codepen.io/YannickFricke/pen/EGwYgy
Соответствующая часть происходит здесь: мы получаем массив объектов из jQuery. Нам нужно перебрать их, чтобы получить имя сериализованных полей ввода и их текущие значения.
Затем мы сохраняем их в объекте, который впоследствии будет декодирован как JSON, а затем декодирован как значение base64.
let serializedData = $(this).serializeArray();
let myData = {};
serializedData.forEach(function(element) {
// We dont want to serialize the value of the "custom_1" input
if (element.name === 'custom_1') {
return;
}
// Set the data
myData[element.name] = element.value;
});
После этой части мы кодируем объект как json и кодируем его как строку base64.
Затем строка в кодировке base64 устанавливается как значение в поле ввода "custom_1".