Не могу вывести текст из формы пишет undefined
Я её нагло взял из интернета,но в силу того,что в JS я ноль полный как и впринципе в создании сайтов,я не понял почему при поступлении сообщения мне на телеграмм поступает вместо текста UNDEFINED
<!-- Remember to include jQuery :) -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<!-- jQuery Modal -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-modal/0.9.1/jquery.modal.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-modal/0.9.1/jquery.modal.min.css" />
<!-- jQuery Cookies -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-cookie/latest/js.cookie.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
</head>
<body>
<div class="form-group">
<h1>Запись</h1>
<form id="datas">
<p>
<label for="phone">Номер телефона *</label><br>
<input id="phone" autocomplete="off" placeholder="+7 (999) 999-99-99" maxlength="12" pattern="^\+7\d{3}\d{7}$" name="phone" class="phone form-control">
</p>
<p>
<label for="time">Дата и время записи *</label><br>
<input id="time" autocomplete="off" class="form-control" placeholder="Введите дату и время">
</p>
<p>
<label for="descr">Сообщение (не обязательно)</label><br>
<textarea id="descr" class="form-control overflow-hidden" placeholder="Введите текст" name="descr" class="form-label overflow-hidden "> </textarea>
</p>
<a href="#" class="btn btn-success " class-btn id="datas-btn">ОТПРАВИТЬ</a>
<p class="ressult"></p>
</form>
</div>
<script>
// Защита от «Дурака» 1. Проверяем куки на количество отправленных заявок и обрубаем очередную отправку после 2 попыток
if(Cookies.get('sent') == '5'){
// Удаляем форму и на ее место вставляем текст
$('#datas').empty().append('Вы отправили слишком много заявок. Попробуйте повторить позже. <br><br>От вас получены следующие данные: <br><br> <strong>Номер телефона:</strong> ' + Cookies.get('phone') + '<br><strong>Краткое описание:</strong> ' + Cookies.get('text'));
}
// ONCLICK IN-MODAL BUTTON
// Вешаем событие на кнопку отправки
$('#datas-btn').click(function(){
// Очищаем поле с результатом
$('p.ressult').empty();
// Защита от «Дурака» 2. Проверяем наличие метки в виде CSS класса и блокируем повторную отправку заявки
if($('#datas-btn').hasClass('sent')){
$('p.ressult').css('color', 'red').append('Вы уже отправили заявку. Если была допущена ошибка — обновите страницу и отправьте заново.');
}else{
var f_phone = $('input.phone').val(),
f_time = $('input.time').val(),
f_descr = $('textarea.descr').val();
// Проверяем корректность номера телефона (только РФ)
if(f_phone == '' || !validatePhone(f_phone)){
$('p.ressult').css('color', 'red').append('Некорректно заполнен номер телефона');
}else{
// Если Телефон корректный — выводим результат
$('p.ressult').css('color', 'green').append('Заявка отправлена!<br>Мы свяжемся с вами в ближайшее время');
// Защита от «Дурака» 2. Вешаем метку в виде CSS класса и блокируем повторную отправку заявки
$('#datas-btn').addClass('sent');
// Заносим номер телефона и текст в куки
Cookies.set('phone', f_phone);
Cookies.set('time', f_time);
Cookies.set('text', f_descr);
// Защита от «Дурака» 1. Даем две попытки на отправку заяявок. Фиксируем их в куках
if(!Cookies.get('sent')){
Cookies.set('sent', '1');
}else if(Cookies.get('sent') == '1'){
Cookies.set('sent', '2');
}
//если все проверки пройдены формируем текстовое собщение
var text = 'Новая заявка:\n ' + f_descr +' ,\n ' + f_phone +',\n ' + f_time;
//и вызываем функцию отправки в телегу
send_tg(text);
// отладочное сообщение
// $('p.ressult').append('<br><br>' + f_phone + ', ' + f_descr);
}
}
});
// STATIC FUNCTIONS
// Защита от «Дурака» 3. Блокируем возможность вставки в поле с номером телефона, дабы отбить желание спамить нам заявки
$('input.phone').bind('cut copy paste', function (e) {
e.preventDefault();
});
// Валидация телефона через регулярные выражения
function validatePhone(phone){
let regex = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
return regex.test(phone);
}
// AJAX отправка данных в ТГ
function send_tg(text){
var chatid = 'chat id was here',
token = 'token was here',
z = $.ajax({
type: "POST",
url: "https://api.telegram.org/bot"+token+"/sendMessage?chat_id="+chatid,
data: "parse_mode=HTML&text="+decodeURIComponent(text),
});
};
</script>
Ответы (1 шт):
Автор решения: Deniska SosiSka
→ Ссылка
Вы считывайте поля по селектору класса, а надо по id, исправьте следующий код:
var f_phone = $('input.phone').val(),
f_time = $('input.time').val(),
f_descr = $('textarea.descr').val();
Должно получиться:
var f_phone = $('#phone').val(),
f_time = $('#time').val(),
f_descr = $('#descr').val();