Mailchimp的$ mcj = jQuery.noConflict(true)导致冲突

时间:2014-07-06 18:40:22

标签: jquery mailchimp

我正在尝试整合MailChimps'标准的html表单进入我的网站。但是,我的网站有一些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>

&#39; .... mailchimp.com/js/mc-validate.js'与我的Google API for jquery冲突,所以我拿出了mailchimp的jquery激活。

我的问题是:

  1. 我必须在.html中使用mailchimp /mc-validate.js行吗? 运行表单的代码或我可以依赖
  2. <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js'> </script>

    1. 如果我确实删除了本机mailchimp jquery行并依赖于 googleapi一行,我遇到了问题      $mcj=jQuery.noConflict(true)代码。
    2. 基本问题是:有没有人有将Mail Chimp集成到他们的网站并使用jQuery遇到这类问题的经验?

      期待您的回答。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

我知道自从你提出这个问题已经有3个月了,但是如果其他人有同样的问题,还会有解释。

在回复下面的评论时,我创建了一个简单的html示例,其中包含指定的jquery版本和经典的mailchimp表单。如您所见,没有抛出任何错误。 (http://thepixel.ninja/lab/mailchimp-signup-form/)。

您收到的错误很可能是页面上某些其他脚本的原因。如果没有你的更多信息,我们无法说出来。

如果你不太了解调试和对可能发生的事情的解释,这里有一些简单修复的细分。

  
      
  1. 我必须在.html代码中使用mailchimp /mc-validate.js行来运行表单,还是可以依赖
  2.         

    &lt; script src =&#39; http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js&#39;&gt;?

这是两个不同的脚本。一个是jQuery自己,一个是mailchimp验证代码。如果您从mailchimp完成了需要js验证,则不需要/mc-validate.js行。如果这是演员表,请按照以下说明操作。不要只是删除这一行,希望一切都会好的。

NB。如果您不需要验证码,那么您可以勾选&#34;禁用所有JavaScript&#34;在mailchimp网站上创建表单时复选框。这将消除所有js错误。 (您也可以选择&#34;裸体形式&#34;而不是&#34;经典形式&#34;然后使用css设置表单样式以查找您想要的内容。

  
      
  1. 如果我确实删除了本机mailchimp jquery行并依赖于   googleapi一行,我遇到了问题   $ mcj = jQuery.noConflict(true)code。
  2.   

如上所述。它们是两个不同的脚本。你不能删除一个并依赖另一个,因为他们做了完全不同的事情。

所有这一切,mailchimp脚本不应该以任何方式与jquery冲突。我已经使用了mailchimp表单和jquery数百次,从来没有遇到过问题。 (请参阅上面的链接)如果您以任何方式编辑了提供给您的mailchimp html代码段,或者您在页面上包含的其他JavaScript中有其他错误,则可能发生此问题。

希望这有助于某人通过消除过程找出他们遇到的问题。

答案 2 :(得分:0)

所以,如果你像我一样,你可能不需要在每一页都有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)。另外,比方说,在您的示例中,我们使用的是缓动插件。这会修改window.jQuery,但是Mailchimp会加载一个不同的版本的jQuery,它不会有任何你一直添加到页面上的插件。我相信他们最初的想法是每个人都会首先加载他们的脚本(这是一个可接受的替代解决方案)。但是,这种方法的问题是我们从最佳实践中知道外部站点的JS应该最后加载,而不是首先加载