Mailchimp $mcj = jQuery.noConflict(true), вызывающий конфликт

Я пытаюсь интегрировать стандартную html-форму MailChimps на свой сайт. Однако на моем сайте есть код jquery, который сталкивается с проблемами с кодом MailChimp.

Следующий код является частью встроенной формы MailChimp:

<script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-  validate.js'></script>
<script type='text/javascript'>
(function($) {
window.fnames = new Array(); window.ftypes = new   Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';
}(jQuery));
var $mcj = jQuery.noConflict(true);
</script>

"... mailchimp.com/js/mc-validate.js" противоречил моему API Google для jquery, поэтому я получил активацию jquery mailchimp.

Мои вопросы:

  • Должен ли я иметь строку mailchimp/mc-validate.js в моем .html код для запуска формы или я могу полагаться на

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js'> </script>?

  1. Если я удалю собственную строку jquery mailchimp jquery и полагаюсь на googleapi, я сталкиваюсь с проблемами с     $mcj=jQuery.noConflict(true).

Основной вопрос: кто-нибудь имел опыт интеграции Mail Chimp на свой веб-сайт и сталкивался с этими типами проблем с помощью jQuery?

Ждем ваших ответов.

Ответы

Ответ 1

вы можете просто использовать это удержание кода в своей программе

<script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-  validate.js'></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type='text/javascript'>
(function($) {
   window.fnames = new Array(); 
   window.ftypes = new Array();
   fnames[0]= 'EMAIL';ftypes[0]='email'; 
   fnames[1]='FNAME';ftypes[1]='text';  
   fnames[2]='LNAME';ftypes[2]='text';
   }());
   var $mcj = $.noConflict(true);
 </script>

Ответ 2

Я знаю, что это было 3 месяца с тех пор, как вы спросили об этом, но на случай, если у кого-то другая проблема будет обсуждаться.

В ответ на комментарий ниже я создал простой пример html, содержащий указанную версию jquery и классическую форму mailchimp. Как видите, ошибок не было. (http://thepixel.ninja/lab/mailchimp-signup-form/).

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

Вот разбивка некоторых простых исправлений, если вы мало знаете об отладке и объяснении того, что может произойти.

  • Должен ли я иметь строку mailchimp/mc-validate.js в моем .html-коде для запуска формы или я могу полагаться на

< script src= 'http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js' > ?

Это два разных сценария. Один из них - это jQuery, а один - код проверки mailchimp. Вам не нужна строка /mc -validate.js, если вам нужно выполнить проверку js из mailchimp. Если это бросок, следуйте приведенным ниже инструкциям. Не просто удалите эту строку и надейтесь, что все будет в порядке.

NB. Если вам не нужен код проверки, вы можете установить флажок "отключить все JavaScript" при создании формы на веб-сайте mailchimp. Это устранит все ошибки js. (Вы также можете выбрать "голая форма" вместо "классической формы", а затем создать форму с помощью css, чтобы посмотреть, как вы хотите).

  1. Если я удалю собственную строку jquery mailchimp jquery и полагаюсь на googleapi, я сталкиваюсь с проблемами с $mcj = jQuery.noConflict(true).

Как указано выше. Это два разных сценария. Вы не можете удалить одно и полагаться на другого, поскольку они делают совершенно разные вещи.

Все, что сказано, mailchimp script никак не конфликтует с jquery. Я использовал форму mailchimp и jquery сотни раз и ни разу не имел проблемы. (см. ссылку выше). Возможно, проблема возникла, если вы отредактировали фрагмент mailchimp html, предоставленный вам каким-либо образом, или если у вас есть другие ошибки в другом javascript, который вы указываете на странице.

Надеюсь, что это поможет кому-то понять проблемы, с которыми они сталкиваются в процессе устранения.

Ответ 3

Итак, если вы похожи на меня, вам может не понадобиться Mailchimp на каждой странице. В этом примере предполагается, что вы загружаете его при необходимости через jQuery, но идея по-прежнему применяется для загрузки его в строку с загрузкой страницы:

var tmp = jQuery.noConflict(); //This jQuery is the one we want

            jQuery.getScript("//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js", function(){
                (function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[3]='CGROUP';ftypes[3]='dropdown';}(jQuery));

              //Let mailchimp set its own jQuery, destroying window.jQuery
                var $mcj = jQuery.noConflict(true);

              //Now, restore the copy of jQuery we saved
                window.jQuery = tmp.noConflict();

             //At this point, things should be as they were before we loaded mailchimp

            });

Чтобы ответить на вопросы других пользователей, причина в том, что Mailchimp ожидает определенную версию jQuery (сейчас 1.9.0). Кроме того, скажем, в вашем примере мы используем плагин easing. Это изменяет window.jQuery, однако Mailchimp загружает другую версию jQuery, у которой не будет ни одного из плагинов, которые вы добавляли на страницу. Я считаю, что их первоначальное мышление состояло в том, что каждый сначала загрузил их script (что является приемлемым альтернативным решением). Однако проблема с этим подходом заключается в том, что мы знаем из лучших практик, что JS с внешнего сайта должен быть загружен последним, а не первым