Bootstrap模态框中的关闭按钮无法使用。

4
我有一个小的JS脚本,可以在用户订阅通讯后将按钮上的文本从“Subscribe”更改为“Close”。但我无法使按钮功能正常,因此模态框实际上关闭不了。
请参考这个示例页面
我使用的小型JS脚本如下:
<script>
let $input = document.getElementById('mc-embedded-subscribe')
  $input.addEventListener('click', function (){
    this.value= "close"
    this.backgroundColor= "red"
  })
</script>

这里我漏掉了什么? Codepen

<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]='COUNTRY';ftypes[2]='text';fnames[3]='MMERGE3';ftypes[3]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
        <!--End mc_embed_signup-->
<!-- Start mc_embed Script Signup -->
<script type='text/javascript' src='https://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[1]='FNAME';ftypes[1]='text';fnames[0]='EMAIL';ftypes[0]='email';
$.extend($.validator.messages, {
  required: "Dette felt er påkrævet.",
  maxlength: $.validator.format("Indtast højst {0} tegn."),
  minlength: $.validator.format("Indtast mindst {0} tegn."),
  rangelength: $.validator.format("Indtast mindst {0} og højst {1} tegn."),
  email: "Indtast en gyldig email-adresse.",
});}(jQuery));var $mcj = jQuery.noConflict(true);
</script>
<script>
let $input = document.getElementById('mc-embedded-subscribe')
  $input.addEventListener('click', function (){
    this.value= "close"
    this.backgroundColor= "red"
  })
</script>
  #mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
  /* MailChimp Form Embed Code - Classic - 12/17/2015 v10.7 */
#mc_embed_signup form {display:block; position:relative; text-align:left; padding:10px 0 10px 3%}
#mc_embed_signup h2 {font-weight:bold; padding:0; margin:15px 0; font-size:1.4em;}
#mc_embed_signup input {border: 1px solid #ABB0B2; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;}
#mc_embed_signup input:focus {border-color:#333;}
#mc_embed_signup .button {clear:both; background-color: #aaa; border: 0 none; border-radius:4px; transition: all 0.23s ease-in-out 0s; color: #FFFFFF; cursor: pointer; display: inline-block; font-size:15px; font-weight: normal; height: 32px; line-height: 32px; margin: 0 5px 10px 0; padding: 0 22px; text-align: center; text-decoration: none; vertical-align: top; white-space: nowrap; width: auto;}
#mc_embed_signup .button:hover {background-color:#777;}
#mc_embed_signup .small-meta {font-size: 11px;}
#mc_embed_signup .nowrap {white-space:nowrap;}

#mc_embed_signup .mc-field-group {clear:left; position:relative; width:96%; padding-bottom:3%; min-height:50px;}
#mc_embed_signup .size1of2 {clear:none; float:left; display:inline-block; width:46%; margin-right:4%;}
* html #mc_embed_signup .size1of2 {margin-right:2%; /* Fix for IE6 double margins. */}
#mc_embed_signup .mc-field-group label {display:block; margin-bottom:3px;}
#mc_embed_signup .mc-field-group input {display:block; width:100%; padding:8px 0; text-indent:2%;}
#mc_embed_signup .mc-field-group select {display:inline-block; width:99%; padding:5px 0; margin-bottom:2px;}

#mc_embed_signup .datefield, #mc_embed_signup .phonefield-us{padding:5px 0;}
#mc_embed_signup .datefield input, #mc_embed_signup .phonefield-us input{display:inline; width:60px; margin:0 2px; letter-spacing:1px; text-align:center; padding:5px 0 2px 0;}
#mc_embed_signup .phonefield-us .phonearea input, #mc_embed_signup .phonefield-us .phonedetail1 input{width:40px;}
#mc_embed_signup .datefield .monthfield input, #mc_embed_signup .datefield .dayfield input{width:30px;}
#mc_embed_signup .datefield label, #mc_embed_signup .phonefield-us label{display:none;}

#mc_embed_signup .indicates-required {text-align:right; font-size:11px; margin-right:4%;}
#mc_embed_signup .asterisk {color:#e85c41; font-size:150%; font-weight:normal; position:relative; top:5px;}     
#mc_embed_signup .clear {clear:both;}

#mc_embed_signup .mc-field-group.input-group ul {margin:0; padding:5px 0; list-style:none;}
#mc_embed_signup .mc-field-group.input-group ul li {display:block; padding:3px 0; margin:0;}
#mc_embed_signup .mc-field-group.input-group label {display:inline;}
#mc_embed_signup .mc-field-group.input-group input {display:inline; width:auto; border:none;}

#mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%; margin: 0 5%; clear: both;}
#mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;}
#mc_embed_signup #mce-error-response {display:none;}
#mc_embed_signup #mce-success-response {color:#529214; display:none;}
#mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;}

#mc-embedded-subscribe {clear:both; width:auto; display:block; margin:1em 0 1em 5%;}
#mc_embed_signup #num-subscribers {font-size:1.1em;}
#mc_embed_signup #num-subscribers span {padding:.5em; border:1px solid #ccc; margin-right:.5em; font-weight:bold;}

#mc_embed_signup #mc-embedded-subscribe-form div.mce_inline_error {display:inline-block; margin:2px 0 1em 0; padding:5px 10px; background-color:rgba(255,255,255,0.85); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; font-size:14px; font-weight:normal; z-index:1; color:#e85c41;}
#mc_embed_signup #mc-embedded-subscribe-form input.mce_inline_error {border:2px solid #e85c41;}
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>


</head>
<body>
<div class="mk row">
    <a href="#">
        <div class="col-sm-12 margin_bottom">
            <div class="hover11 column">
                <figure>
                    <a href="#" data-toggle="modal" data-target="#nyhedsbrev-tilmelding">
                      <img src="https://dohanews.co/wp-content/uploads/2016/07/headline.png" alt="Sign up for our newsletter" class="img-responsive"></img>
                    </a>
                </figure>
            </div>
            <div class="modal fade" id="nyhedsbrev-tilmelding" role="dialog">
                <div class="modal-dialog">
                    <div class="modal-content">
                        <div class="modal-body">
                            <div id="mc_embed_signup">
                                  <form action="https://zalis.us17.list-manage.com/subscribe/post?u=3be651219436ee0f217f040a5&amp;id=d07c036d2e" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
                                    <div id="mc_embed_signup_scroll">
                                    <h2>Subscribe to our mailing list</h2>
                                      <div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
                                      <div class="mc-field-group">
                                        <label for="mce-EMAIL">Email Address  <span class="asterisk">*</span></label>
                                        <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
                                      </div>
                                      <div class="mc-field-group">
                                       <label for="mce-FNAME">First Name </label>
                                       <input type="text" value="" name="FNAME" class="" id="mce-FNAME">
                                      </div>
                                      <div id="mce-responses" class="clear">
                                      <div class="response" id="mce-error-response" style="display:none"></div>
                                      <div class="response" id="mce-success-response" style="display:none"></div>
                                     </div> 
                                      <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_3be651219436ee0f217f040a5_d07c036d2e" tabindex="-1" value=""></div>
                                      <div class="clear">
                                          <input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
                                      </div>
                                  </div>
                              </form>
                            </div>
                        </div>
                        
                    </div>
                </div>
            </div>
            <div class="inner-wrapper bottom-left"></div>
        </div>
    </a>
</div>
</body>
</html>

2个回答

1
你可以使用以下代码,这是一个快速修复。
  1. 我已经添加了一个检查来检查是否显示成功消息
  2. 等待1秒钟以更改关闭文本,并添加模态框的data-dismiss属性以关闭弹出窗口
let $input = document.getElementById('mc-embedded-subscribe')
  $input.addEventListener('click', function (){
  setTimeout(function(){
  if(document.getElementById("mce-success-response").style.display != "none") {
    document.getElementById('mc-embedded-subscribe').value= "close",
    document.getElementById('mc-embedded-subscribe').setAttribute('data-dismiss','modal')
    }},1000);
  })

<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]='COUNTRY';ftypes[2]='text';fnames[3]='MMERGE3';ftypes[3]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
        <!--End mc_embed_signup-->
<!-- Start mc_embed Script Signup -->
<script type='text/javascript' src='https://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[1]='FNAME';ftypes[1]='text';fnames[0]='EMAIL';ftypes[0]='email';
$.extend($.validator.messages, {
  required: "Dette felt er påkrævet.",
  maxlength: $.validator.format("Indtast højst {0} tegn."),
  minlength: $.validator.format("Indtast mindst {0} tegn."),
  rangelength: $.validator.format("Indtast mindst {0} og højst {1} tegn."),
  email: "Indtast en gyldig email-adresse.",
});}(jQuery));var $mcj = jQuery.noConflict(true);
</script>
<script>
let $input = document.getElementById('mc-embedded-subscribe')
  $input.addEventListener('click', function (){
  setTimeout(function(){
  if(document.getElementById("mce-success-response").style.display != "none") {
    document.getElementById('mc-embedded-subscribe').value= "close",
    document.getElementById('mc-embedded-subscribe').setAttribute('data-dismiss','modal')
    }},1000);

  })
</script>
#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
  /* MailChimp Form Embed Code - Classic - 12/17/2015 v10.7 */
#mc_embed_signup form {display:block; position:relative; text-align:left; padding:10px 0 10px 3%}
#mc_embed_signup h2 {font-weight:bold; padding:0; margin:15px 0; font-size:1.4em;}
#mc_embed_signup input {border: 1px solid #ABB0B2; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;}
#mc_embed_signup input:focus {border-color:#333;}
#mc_embed_signup .button {clear:both; background-color: #aaa; border: 0 none; border-radius:4px; transition: all 0.23s ease-in-out 0s; color: #FFFFFF; cursor: pointer; display: inline-block; font-size:15px; font-weight: normal; height: 32px; line-height: 32px; margin: 0 5px 10px 0; padding: 0 22px; text-align: center; text-decoration: none; vertical-align: top; white-space: nowrap; width: auto;}
#mc_embed_signup .button:hover {background-color:#777;}
#mc_embed_signup .small-meta {font-size: 11px;}
#mc_embed_signup .nowrap {white-space:nowrap;}

#mc_embed_signup .mc-field-group {clear:left; position:relative; width:96%; padding-bottom:3%; min-height:50px;}
#mc_embed_signup .size1of2 {clear:none; float:left; display:inline-block; width:46%; margin-right:4%;}
* html #mc_embed_signup .size1of2 {margin-right:2%; /* Fix for IE6 double margins. */}
#mc_embed_signup .mc-field-group label {display:block; margin-bottom:3px;}
#mc_embed_signup .mc-field-group input {display:block; width:100%; padding:8px 0; text-indent:2%;}
#mc_embed_signup .mc-field-group select {display:inline-block; width:99%; padding:5px 0; margin-bottom:2px;}

#mc_embed_signup .datefield, #mc_embed_signup .phonefield-us{padding:5px 0;}
#mc_embed_signup .datefield input, #mc_embed_signup .phonefield-us input{display:inline; width:60px; margin:0 2px; letter-spacing:1px; text-align:center; padding:5px 0 2px 0;}
#mc_embed_signup .phonefield-us .phonearea input, #mc_embed_signup .phonefield-us .phonedetail1 input{width:40px;}
#mc_embed_signup .datefield .monthfield input, #mc_embed_signup .datefield .dayfield input{width:30px;}
#mc_embed_signup .datefield label, #mc_embed_signup .phonefield-us label{display:none;}

#mc_embed_signup .indicates-required {text-align:right; font-size:11px; margin-right:4%;}
#mc_embed_signup .asterisk {color:#e85c41; font-size:150%; font-weight:normal; position:relative; top:5px;}     
#mc_embed_signup .clear {clear:both;}

#mc_embed_signup .mc-field-group.input-group ul {margin:0; padding:5px 0; list-style:none;}
#mc_embed_signup .mc-field-group.input-group ul li {display:block; padding:3px 0; margin:0;}
#mc_embed_signup .mc-field-group.input-group label {display:inline;}
#mc_embed_signup .mc-field-group.input-group input {display:inline; width:auto; border:none;}

#mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%; margin: 0 5%; clear: both;}
#mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;}
#mc_embed_signup #mce-error-response {display:none;}
#mc_embed_signup #mce-success-response {color:#529214; display:none;}
#mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;}

#mc-embedded-subscribe {clear:both; width:auto; display:block; margin:1em 0 1em 5%;}
#mc_embed_signup #num-subscribers {font-size:1.1em;}
#mc_embed_signup #num-subscribers span {padding:.5em; border:1px solid #ccc; margin-right:.5em; font-weight:bold;}

#mc_embed_signup #mc-embedded-subscribe-form div.mce_inline_error {display:inline-block; margin:2px 0 1em 0; padding:5px 10px; background-color:rgba(255,255,255,0.85); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; font-size:14px; font-weight:normal; z-index:1; color:#e85c41;}
#mc_embed_signup #mc-embedded-subscribe-form input.mce_inline_error {border:2px solid #e85c41;}
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>


</head>
<body>
<div class="mk row">
    <a href="#">
        <div class="col-sm-12 margin_bottom">
            <div class="hover11 column">
                <figure>
                    <a href="#" data-toggle="modal" data-target="#nyhedsbrev-tilmelding">
                      <img src="https://dohanews.co/wp-content/uploads/2016/07/headline.png" alt="Sign up for our newsletter" class="img-responsive"></img>
                    </a>
                </figure>
            </div>
            <div class="modal fade" id="nyhedsbrev-tilmelding" role="dialog">
                <div class="modal-dialog">
                    <div class="modal-content">
                        <div class="modal-body">
                            <div id="mc_embed_signup">
                                  <form action="https://zalis.us17.list-manage.com/subscribe/post?u=3be651219436ee0f217f040a5&amp;id=d07c036d2e" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
                                    <div id="mc_embed_signup_scroll">
                                    <h2>Subscribe to our mailing list</h2>
                                      <div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
                                      <div class="mc-field-group">
                                        <label for="mce-EMAIL">Email Address  <span class="asterisk">*</span></label>
                                        <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
                                      </div>
                                      <div class="mc-field-group">
                                       <label for="mce-FNAME">First Name </label>
                                       <input type="text" value="" name="FNAME" class="" id="mce-FNAME">
                                      </div>
                                      <div id="mce-responses" class="clear">
                                      <div class="response" id="mce-error-response" style="display:none"></div>
                                      <div class="response" id="mce-success-response" style="display:none"></div>
                                     </div> 
                                      <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_3be651219436ee0f217f040a5_d07c036d2e" tabindex="-1" value=""></div>
                                      <div class="clear">
                                          <input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
                                      </div>
                                  </div>
                              </form>
                            </div>
                        </div>
                        
                    </div>
                </div>
            </div>
            <div class="inner-wrapper bottom-left"></div>
        </div>
    </a>
</div>
</body>
</html>


非常好的解决方案,Charan。我也在寻找一个快速修复方法。在几个月内,将有一位前端开发人员需要手动制作表单。非常感谢你。 - MK-DK

0

试试这个...

<script>
 let $input = document.getElementById('mc-embedded-subscribe')
  $input.addEventListener('click', function (){
    this.setAttribute('style','display:none');
    document.querySelector('.clear').innerHTML = '<input type="button" value="Close" style="background-color:red" name="Close" id="mc-embedded-subscribe" class="button">';
  })
</script>

点击订阅按钮后,在显示成功消息之前,将关闭模态窗口。 - charan kumar
这个脚本在成功消息显示之前关闭了模态框。但是感谢您的建议和时间。 - MK-DK
@charankumar。您有解决此问题的建议吗?听起来您可能有 :-) - MK-DK
再次感谢您的时间。按钮仍然无法正常工作,而且代码不幸地隐藏了成功消息。使用您的代码的演示网站:http://vouzalis.dk/scripter.html - MK-DK
成功信息的代码在哪里?@charankumar - Shubham Baranwal
@ShubhamBaranwal,我已经发布了一个答案,请检查。 - charan kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接