@BLM21

Знает ли кто-нибудь, как отвязать открытие кнопки формы от ID? Или как делать нелимитированное количество разных кнопок формы для сайта?

Приветствую всех знатоков.
На сайте есть форма для заказа обратного звонка. Для её создания потребовался файл CSS , два JS скрипта и Jquery. Как-то многовато для такой ерундовины.

Сегодня обнаружил, что последние версии браузеров на движке Chromium и даже Firefox сделали так, что в поле номера теперь нет автоматически выставленного +7 и скобок, которые, так сказать, подсказки пользователю для ввода номера телефона. Ах, да, форма отсылает имя и номер телефона человека в Telegram. В интернете полно слизанного плагиата, как сделать такую форму. Но все эти плагиатчики не упоминают, что поле ввода номера будет без +7 и скобок. Я сто лет искал код, чтобы самому сделать этот +7, а теперь последние версии браузеров это аннулировали к чёрту.

К тому же, при правке старой страницы я решил сегодня разместить кнопки. И офигел. Для каждой пришлось прописывать class в CSS. Но это полбеды. Ещё пришлось прописывать в JS. Однако функционирует JS скрипт странно. Несмотря на пропись в документе, некоторые кнопки не открываются вообще. При замене их местами, то есть последнюю кнопку, к примеру, выставить в документе третьей по счёту, тогда кнопка, что была последней и встала на третье место, начинает работать, но перестаёт работать какая-то другая кнопка.

Привязка кнопок по ID, соответственно. И этих ID, как я убедился, тоже лимит, потому что переименовывание ни к чему хорошему не приводит. Более того, как я понял, есть кнопки в header и footer, которые работают всегда. А вот другие кнопки, допустим, кнопка "ЗВОНИ", если размещена на странице "овощи", то на странице "фрукты" она уже не работает. получается ID будто привязывается к определённому документу, где ты его прописал. Это неимоверно бесит.

Отсюда вопрос. Как возможно избавиться от этой привязки к ID, чтобы кнопки работали и не надо было прописывать четыреста ID-шников для десятков страниц? Вплоть до того, что готов полностью перейти на какую-то другую форму, если она проста, как кусочек хозяйственного мыла и легка в подключении на десятках страниц, с переименованием самого текста в кнопке, лишь бы не было таких тупых заморочек с ерундовой какой-то формой.

А вот код php (да, по-моему, именно php правил, чтобы добиться +7 и скобок ) , благодаря которому удалось сделать в форме +7. И, да, проверил на телефоне - работает. Очищал кэш, удалял историю, куки и проч. - всё равно работает. Ибо на телефоне отключено автообновление браузера. То есть, в старых версиях браузеров работает исправно. А в новых - штанга. Траблу этому с +7 менее месяца точно. Заметил сегодня.

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!empty($_POST['name']) && !empty($_POST['phone'])){
  if (isset($_POST['name'])) {
    if (!empty($_POST['name'])){
  $name = strip_tags($_POST['name']);
  $nameFieldset = "Имя пославшего: ";
  }
}

if (isset($_POST['phone'])) {
  if (!empty($_POST['phone'])){
  $phone = strip_tags($_POST['phone']);
  $phoneFieldset = "Телефон: ";
  }
}
if (isset($_POST['theme'])) {
  if (!empty($_POST['theme'])){
  $theme = strip_tags($_POST['theme']);
  $themeFieldset = "Тема: ";
  }
}

$ip=$_SERVER["REMOTE_ADDR"]; // Вычисляем ip пользователя
$brose=$_SERVER["HTTP_USER_AGENT"]; // Вычисляем браузер пользователя
$txtname = trim($_POST['name']);
$txtNameValue = trim($_POST['name_class_value']);
$txtphone = trim($_POST['phone']);
$txttheme = trim($_POST['theme']);

// от кого
$fromMail = 'info@foryou.com';
$fromName = 'заявка с сайта';

// Сюда введите Ваш email
$emailTo = 'suka-ti-djo@bk.ru';

$subject = 'Форма обратной связи';
$subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
$headers = "Content-type: text/plain; charset=\"utf-8\"\r\n";
$headers .= "From: ". $fromName ." <". $fromMail ."> \r\n";

// тело письма
$body = "Получена заявка с сайта https://preaniki.com\n\nИмя: $txtname\nТелефон: $txtphone\nТема: $txttheme\n\nIP отправителя: $ip\nБраузер отправителя: $brose";
$mail = mail($emailTo, $subject, $body, $headers, '-f'. $fromMail );

//echo 'ok';


$token = ":AAGAzjUOwxUfJ0342c";
$chat_id = "-1941";
$arr = array(
  $nameFieldset => $name,
  $phoneFieldset => $phone,
  $themeFieldset => $theme
);

foreach($arr as $key => $value) {
  $txt .= "<b>".$key."</b> ".$value."%0A";
};
$txt = str_replace('+','%2B',$txt);
$sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");
if ($sendToTelegram) {
 
  echo '<p class="form-title success">Наши поздравления!<br />Вы сделали правильный выбор!</p>';
    return true;
} else {
  echo '<p class="form-title fail"><b>Ошибка. Сообщение не отправлено!</b></p>';
}
} else {
  echo '<p class="form-title fail">Ошибка. Вы заполнили не все обязательные поля!</p>';
}
} else {
header ("Location: /");
}

?>


А вот он JS для формы Telegram :

$(document).ready(function () {
    $(".form-element").submit(function () {
        var formID = $(this).attr('id');
        var formNm = $('#' + formID);
        var message = $(formNm).find(".form-message");
        var formTitle = $(formNm).find(".form-title");
        $.ajax({
            type: "POST",
            url: 'https://preanik.com/callback-form/telegramform/php/send-message-to-telegram.php',
            data: formNm.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              message.html(data);
              formTitle.css("display","none");
			    $('input','.form-element').not(':input[type=submit], :input[type=hidden], :reset').val('');
				$(".form-element input[type=submit]").attr('disabled','disabled');
              /* setTimeout(function(){
                formTitle.css("display","block");
                message.html('');
                $(".form-element input[type=submit]").attr('enabled','enabled');				
              }, 30000); */
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                message.html(error);
                formTitle.css("display","none");
                setTimeout(function(){
                  formTitle.css("display","block");
                  message.html('');
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });	
	
});

  var modal = document.querySelector("#modal"),
	  modalOverlay = document.querySelector("#modal-overlay"),
	  closeButton = document.querySelector("#close-button"),
	  openButton = document.querySelector("#call-computer-master");
      openButton2 = document.querySelector("#call-pc-master");
      openButton3 = document.querySelector("#call-computer-wizard");
      openButton4 = document.querySelector("#phone-computer-wizard");
      openButton5 = document.querySelector("#computer-wizard-call");
      openButton6 = document.querySelector("#call-pc-wizard");
  
  closeButton.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });
  modalOverlay.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });
  openButton.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });
  openButton2.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });
  openButton3.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });
  openButton4.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });
  openButton5.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });
  openButton6.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });

  
  
  $(function(){
	$("#phone").mask("+7 (999) 999-99-99");
  });


И вот этот "openbutton" если используется в одном документе, то в другом документе - НЕ работает уже. А после "openbutton5" создание новых кнопок бесполезно - они тупо не работают вообще нигде и никак.
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
@BLM21 Автор вопроса
Этот рабочий ответ посвящаю Ankhena, известную в тесных кругах, как Бог JS.

И безлимитное количество кнопок, вызывающих модальное окно БЕЗ ПРИВЯЗКИ к ID # , и работает всё корректно, и даже +7 для Telegram теперь работает исправно.

$(function(){
	$("#phone").mask("+7 (999) 999-99-99");
  });


$(document).ready(function () {
    $(".form-element").submit(function () {
        var formID = $(this).attr('ID');
        var formNm = $('#' + formID);
        var message = $(formNm).find(".form-message");
        var formTitle = $(formNm).find(".form-title");
        $.ajax({
            type: "POST",
            url: 'https://blm21.com/callback-form/telegramform/php/send-message-to-telegram.php',
            data: formNm.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              message.html(data);
              formTitle.css("display","none");
			    $('input','.form-element').not(':input[type=submit], :input[type=hidden], :reset').val('');
				$(".form-element input[type=submit]").attr('disabled','disabled');
              /* setTimeout(function(){
                formTitle.css("display","block");
                message.html('');
                $(".form-element input[type=submit]").attr('enabled','enabled');				
              }, 30000); */
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                message.html(error);
                formTitle.css("display","none");
                setTimeout(function(){
                  formTitle.css("display","block");
                  message.html('');
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });	
	
});


  var modal = document.querySelector("#modal"),
	  closeButton = document.querySelector("#close-button");

  closeButton.addEventListener("click", function() {
	modal.classList.toggle("closed");
	modalOverlay.classList.toggle("closed");
  });

  const  openButtons = document.querySelectorAll(".modal-btn");
  
  openButtons.forEach(btn=> {
    btn.addEventListener("click", () => {
       modal.classList.toggle("closed");
       modalOverlay.classList.toggle("closed");
    });
})

  const  modalOverlay = document.querySelector(".modal-overlay");

  modalOverlay.forEach(btn=> {
    modalOverlay.addEventListener("click", () => {
       modal.classList.toggle("closed");
       modalOverlay.classList.toggle("closed");
    });
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 11:49
25000 руб./за проект
25 апр. 2024, в 11:37
40000 руб./за проект