Почему так работает?
Есть код на https://codepen.io/michielvandewalle/pen/oeoMXg
Работает отлично на именно там. в коде JS есть вот такой кусочек
(function () {
document.getElementsByTagName('form')[0].addEventListener('submit', function (e) {
e.preventDefault();
Должен предотвращать переход по ссылке в случае успешной подписки, так и происходит пока код выполняется на codepen. Как только код переносится на живой сайт, e.preventDefault() перестает работать и происходит переход. Почему и как это исправить? |
Цитата:
Цитата:
|
[quote=рони;500611]нет элементов с которыми работает скрипт.
элементы это Код:
<form id="chomp"....обернуть в load $(document).ready(function()вот это ? или как то по другому? |
Цитата:
document.addEventListener('DOMContentLoaded', function() {
document.getElementsByTagName('form')[0].addEventListener('submit', function (e) {
e.preventDefault();
})
});
|
сейчас попробую, вот это не работает корректно
<main>
<form id="chimp" action="https://made-in-altai.us19.list-manage.com/subscribe/post?u=55cf009edf905bbae51535dda&id=9458b84861" method="post" novalidate>
<h2>Subscribe to our mailing list</h2>
<div id="js-form-inputs">
<div>
<label for="mce-EMAIL">Email Address<sup>*</sup></label>
<input type="email" name="EMAIL" id="mce-EMAIL" value="" placeholder="Email">
</div>
<div>
<label for="mce-FNAME">First Name </label>
<input type="text" name="FNAME" id="mce-FNAME" value="" placeholder="First name">
</div>
<div>
<label for="mce-LNAME">Last Name </label>
<input type="text" name="LNAME" id="mce-LNAME" value="" placeholder="Last name">
</div>
</div>
<!-- honeypot -->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" id="js-validate-robot" name="b_55cf009edf905bbae51535dda_9458b84861" tabindex="-1" value=""></div>
<!-- submit -->
<button type="submit" name="subscribe" id="mc-embedded-subscribe">Subscribe</button>
<!-- response -->
<p id="js-subscribe-response"></p>
</form>
</main>
$( document ).ready(function() {
document.getElementsByTagName('#chimp')[0].addEventListener('submit', function (e)
{
e.preventDefault();
// Check for spam
if(document.getElementById('js-validate-robot').value !== '') { return false }
// Get url for mailchimp
var url = this.action.replace('/post?', '/post-json?');
// Add form data to object
var data = '';
var inputs = this.querySelectorAll('#js-form-inputs input');
for (var i = 0; i < inputs.length; i++) {
data += '&' + inputs[i].name + '=' + encodeURIComponent(inputs[i].value);
}
// Create & add post script to the DOM
var script = document.createElement('script');
script.src = url + data;
document.body.appendChild(script);
// Callback function
var callback = 'callback';
window[callback] = function(data) {
// Remove post script from the DOM
delete window[callback];
document.body.removeChild(script);
// Display response message
document.getElementById('js-subscribe-response').innerHTML = data.msg
};
});
};
|
document.getElementById('chimp').....
|
предложенный вами вариант тоже на заработал...
|
Строка 35 - должно быть });
И уж тогда на чем-то одном:
$(document).ready(function() {
$('#chimp').submit(function (e) {
e.preventDefault();
.....
|
Всё равно проходит редирект
<main>
<form id="chimp1" action="https://made-in-altai.us19.list-manage.com/subscribe/post?u=55cf009edf905bbae51535dda&id=9458b84861" method="post" novalidate>
<h2>Subscribe to our mailing list</h2>
<div id="js-form-inputs">
<div>
<label for="mce-EMAIL">Email Address<sup>*</sup></label>
<input type="email" name="EMAIL" id="mce-EMAIL" value="" placeholder="Email">
</div>
<div>
<label for="mce-FNAME">First Name </label>
<input type="text" name="FNAME" id="mce-FNAME" value="" placeholder="First name">
</div>
<div>
<label for="mce-LNAME">Last Name </label>
<input type="text" name="LNAME" id="mce-LNAME" value="" placeholder="Last name">
</div>
</div>
<!-- honeypot -->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" id="js-validate-robot" name="b_55cf009edf905bbae51535dda_9458b84861" tabindex="-1" value=""></div>
<!-- submit -->
<button type="submit" name="subscribe" id="mc-embedded-subscribe">Subscribe</button>
<!-- response -->
<p id="js-subscribe-response"></p>
</form>
</main>
<script>/*
* Mailchimp AJAX form submit VanillaJS
* Vanilla JS
* Author: Michiel Vandewalle
* Github author: [url]https://github.com/michiel-vandewalle[/url]
* Github project: [url]https://github.com/michiel-vandewalle/Mailchimp-AJAX-form-submit-vanillaJS[/url]
*/
$(document).ready(function() {
$('#chimp1').submit(function (e) {
e.preventDefault();
// Check for spam
if(document.getElementById('js-validate-robot').value !== '') { return false }
// Get url for mailchimp
var url = this.action.replace('/post?', '/post-json?');
// Add form data to object
var data = '';
var inputs = this.querySelectorAll('#js-form-inputs input');
for (var i = 0; i < inputs.length; i++) {
data += '&' + inputs[i].name + '=' + encodeURIComponent(inputs[i].value);
}
// Create & add post script to the DOM
var script = document.createElement('script');
script.src = url + data;
document.body.appendChild(script);
// Callback function
var callback = 'callback';
window[callback] = function(data) {
// Remove post script from the DOM
delete window[callback];
document.body.removeChild(script);
// Display response message
document.getElementById('js-subscribe-response').innerHTML = data.msg
};
};
});
</script>
|
Сначала ошибки исправить, опять та же, строка 72 - })
|
исправил, редиректа нет, поля не очищаются, информации об успешной подписке нет вот здесь.
<p id="js-subscribe-response"></p>
</form>
Как это всё на работает можно глянуть в подвале made-in-altai.ru. кэш чистый |
Цитата:
|
да это mailchimp уже редирект делает на свой домен... а вообще сейчас глянул в ошибки по chromу
(index):2538 Cross-Origin Read Blocking (CORB) blocked cross-origin response https://made-in-altai.us19.list-mana...kdj&LNAME=kdfj with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details. |
Но в исходном на codepen
https://codepen.io/michielvandewalle/pen/oeoMXgвсе ок и не каких тебе CORB |
Цитата:
|
т.е. для codepen у маил чимпа есть разрешение???
|
Цитата:
|
Это не CORS ошибка а CORB
|
Не почту, а добавить в список на маилчимпе почтовый адрес
|
для codepen CORB не всплывает.. на моем сайте вылазит.
|
Цитата:
|
document.body.appendChild(script); матерится вот здесь
|
var script = document.createElement('script');
script.src = url + data;
document.body.appendChild(script);
|
| Часовой пояс GMT +3, время: 12:59. |