为什么单击后我的模式窗口无法关闭?

时间:2019-10-16 10:39:24

标签: javascript html css modal-dialog

我在HTML上有两个元素。每个标签中都有一个问号图标。单击问号会触发一个模式窗口。这是我的html代码,看起来像

<form>
<div class="form-group">
            <label class="control-label col-md-4 col-lg-3 required" for="offer_title" id="ThemaLbl">
                <div class="inline-help form-label"><i onClick="myFunction('themaModal')" class="fa fa-question-circle-o" id="ThemaHilfe"></i></div>Thema</label>
            <div class="col-md-8 col-lg-9">
                <textarea class="longInput" cols="42" rows="1" id="ThemaTextfield"></textarea>
            </div>
</div>

<!-- The Modal -->
        <div id="themaModal" class="modal">

            <!-- Modal content -->
            <div class="modal-content">
                <div class="modalheader">
                    <h2><p><b id="hilfeTitel">Wie kann ich eine neue Anzeige erstellen?</b></p></h2>
                </div>
                <div>
                    <p style="display: block;"><font size="6" id="hilfeText"><b id="hilfeText">Sie wollen eine neue Anzeige anlegen?</b> Dann tragen Sie die zugehörigen Informationen ein und speichern
        das Ergebnis am Ende ab.</font></p>
                </div>
                <div>
                    <div class="panel panel-default" id="feedback-form">
                        <div class="panel-heading">
                            <h4 class="panel-title" id="hilfeQuestion">
        <i class="fa fa-question-circle"></i> Waren die Informationen für Sie hilfreich? </h4>
                        </div>
                        <div class="panel-body">
                            <form class="feedback" id="new_feedback" role="form" action="/feedbacks" method="post" accept-charset="UTF-8" data-remote="true">
                                <input name="utf8" type="hidden" value="✓">
                                <div class="form-group">
                                    <textarea name="feedback[comment]" class="form-control" id="feedback_comment" placeholder="Sie können uns hier Ihre Anmerkungen mitteilen."></textarea>
                                </div>
                                <input name="feedback[context]" id="feedback_context" type="hidden" value="/offers/new">
                                <input name="feedback[help_key]" id="feedback_help_key" type="hidden" value="help.offers.new">
                            </form>
                            <div class="hidden response">
                                Vielen Dank für Ihr Feedback!
                            </div>
                        </div>
                    </div>

                    <div class="sa-button-container">
                        <button tabindex="2" class="cancel" style="display: none; box-shadow: none;">Cancel</button>
                        <div class="sa-confirm-button-container">
                            <button id="commentOK" tabindex="1" class="confirm" style="display: inline-block; box-shadow: 0px 0px 2px rgba(140,212,245,0.8), inset 0px 0px 0px 1px rgba(0,0,0,0.05);">OK</button>
                            <div class="la-ball-fall">
                                <div></div>
                                <div></div>
                                <div></div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

<div class="form-group">
            <label class="control-label col-md-4 col-lg-3" for="offer_content" id="InhaltLbl">
                <div class="inline-help form-label" ><i onClick="myFunction('inhaltModal')" class="fa fa-question-circle-o" id="InhaltHilfe"></i></div>Inhalt</label>
            <div class="col-md-8 col-lg-9">
                <textarea class="longInput" cols="42" rows="4" id="InhaltTextfield"></textarea>
            </div>
        </div>

        <!-- The Modal -->
        <div id="inhaltModal" class="modal">

            <!-- Modal content -->
            <div class="modal-content">
                <div class="modalheader">
                    <h2><p><b id="hilfeTitel">Wie kann ich eine neue Anzeige erstellen?</b></p></h2>
                </div>
                <div>
                    <p style="display: block;"><font size="6" id="hilfeText"><b id="hilfeText">Sie wollen eine neue Anzeige anlegen?</b> Dann tragen Sie die zugehörigen Informationen ein und speichern
        das Ergebnis am Ende ab.</font></p>
                </div>
                <div>
                    <div class="panel panel-default" id="feedback-form">
                        <div class="panel-heading">
                            <h4 class="panel-title" id="hilfeQuestion">
        <i class="fa fa-question-circle"></i> Waren die Informationen für Sie hilfreich? </h4>
                        </div>
                        <div class="panel-body">
                            <form class="feedback" id="new_feedback" role="form" action="/feedbacks" method="post" accept-charset="UTF-8" data-remote="true">
                                <input name="utf8" type="hidden" value="✓">
                                <div class="form-group">
                                    <textarea name="feedback[comment]" class="form-control" id="feedback_comment" placeholder="Sie können uns hier Ihre Anmerkungen mitteilen."></textarea>
                                </div>
                                <input name="feedback[context]" id="feedback_context" type="hidden" value="/offers/new">
                                <input name="feedback[help_key]" id="feedback_help_key" type="hidden" value="help.offers.new">
                            </form>
                            <div class="hidden response">
                                Vielen Dank für Ihr Feedback!
                            </div>
                        </div>
                    </div>

                    <div class="sa-button-container">
                        <button tabindex="2" class="cancel" style="display: none; box-shadow: none;">Cancel</button>
                        <div class="sa-confirm-button-container">
                            <button id="commentOK" tabindex="1" class="confirm" style="display: inline-block; box-shadow: 0px 0px 2px rgba(140,212,245,0.8), inset 0px 0px 0px 1px rgba(0,0,0,0.05);">OK</button>
                            <div class="la-ball-fall">
                                <div></div>
                                <div></div>
                                <div></div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
</form>

第一个框正常。但是,由于某些原因,第二个框在单击确定按钮后没有关闭。我的.css看起来像这样:

/* The Modal (background) */
.modal {
  display: none; /* Hidden by default */
  position: fixed; /* Stay in place */
  z-index: 999; /* Sit on top */
  padding-top: 100px; /* Location of the box */
  left: 0;
  top: 0;
  width: 100%; /* Full width */
  height: 100%; /* Full height */
  overflow: auto; /* Enable scroll if needed */
  background-color: rgb(0,0,0); /* Fallback color */
  background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}

/* Modal Content */
.modal-content {
  background-color: #fefefe;
  margin: auto;
  padding: 20px;
  border: 1px solid #888;
  width: 80%;
}

/* The Close Button */
.close {
  color: #aaaaaa;
  float: right;
  font-size: 28px;
  font-weight: bold;
}

.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
}


.modalheader{

    margin: -17px -17px 15px;
    padding: 10px 15px;
    background-color: #f2fcde;
    border-bottom: 1px solid silver;
    font-weight: 600;
    line-height: 40px;
    display: -ms-flexbox !important;
    font-family: inherit;
    font-size: 7;
}

这是我的js:

function myFunction(modalElem){
// Get the modal
var modal = document.getElementById(modalElem);

// Get the <span> element that closes the modal
var span = document.getElementById("commentOK");

  modal.style.display = "block";


// When the user clicks on <span> (OK), close the modal
span.onclick = function() {
  modal.style.display = "none";
}

我尝试将模式窗口的代码放置在html文件底部靠近正文的“窗体”外部,但这没有帮助。我不是一个经验丰富的html程序员,无论该bug是什么,我都找不到。我该如何解决?

2 个答案:

答案 0 :(得分:1)

var modal = document.getElementById(ok);

我认为问题是getElementById里面的值必须是字符串,请尝试:

var modal = document.getElementById('ok');

答案 1 :(得分:0)

问题出在两个模态中的两个按钮都使用相同的ID。 document.getElementById在整个文档中搜索具有该ID的唯一元素,结果它仅返回具有该ID的HTML中的第一个元素。

建议在HTML元素中使用唯一的ID

  

如果id值不是空字符串,则它在   文档。

选中此https://developer.mozilla.org/en-US/docs/Web/API/Element/id

但是,如果您想保留重复的ID,则应该从模式div元素的子元素中查找该元素。您可以使用querySelector来执行此操作并查询id属性

查询选择器 https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector

属性选择器 https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors

此处的工作示例:

function myFunction(ok) {
  // Get the modal
  var modal = document.getElementById(ok);

  // Get the <span> element that closes the modal
  var span = modal.querySelector("[id=commentOK]");

  modal.style.display = "block";


  // When the user clicks on <span> (OK), close the modal
  span.onclick = function() {
    modal.style.display = "none";
  }
}
/* The Modal (background) */

.modal {
  display: none;
  /* Hidden by default */
  position: fixed;
  /* Stay in place */
  z-index: 999;
  /* Sit on top */
  padding-top: 100px;
  /* Location of the box */
  left: 0;
  top: 0;
  width: 100%;
  /* Full width */
  height: 100%;
  /* Full height */
  overflow: auto;
  /* Enable scroll if needed */
  background-color: rgb(0, 0, 0);
  /* Fallback color */
  background-color: rgba(0, 0, 0, 0.4);
  /* Black w/ opacity */
}


/* Modal Content */

.modal-content {
  background-color: #fefefe;
  margin: auto;
  padding: 20px;
  border: 1px solid #888;
  width: 80%;
}


/* The Close Button */

.close {
  color: #aaaaaa;
  float: right;
  font-size: 28px;
  font-weight: bold;
}

.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
}

.modalheader {
  margin: -17px -17px 15px;
  padding: 10px 15px;
  background-color: #f2fcde;
  border-bottom: 1px solid silver;
  font-weight: 600;
  line-height: 40px;
  display: -ms-flexbox !important;
  font-family: inherit;
  font-size: 7;
}
<form>
  <div class="form-group">
    <label class="control-label col-md-4 col-lg-3 required" for="offer_title" id="ThemaLbl">
                <div class="inline-help form-label" data-help="&lt;b&gt;Sie wollen ein
" data-heading="Wie kann ich ein Thema eintragen?" data-help-key="offers.title"><i onClick="myFunction('themaModal')" class="fa fa-question-circle-o" id="ThemaHilfe">?</i></div>Thema</label>
    <div class="col-md-8 col-lg-9">
      <textarea class="longInput" cols="42" rows="1" id="ThemaTextfield"></textarea>
    </div>
  </div>

  <!-- The Modal -->
  <div id="themaModal" class="modal">

    <!-- Modal content -->
    <div class="modal-content">
      <div class="modalheader">
        <h2
          <b id="hilfeTitel">Wie kann ich eine neue Anzeige erstellen?</b>
        </h2>
      </div>
      <div>
        <p style="display: block;">
          <font size="2" id="hilfeText"><b id="hilfeText">Sie wollen eine neue Anzeige anlegen?</b> Dann tragen Sie die zugehörigen Informationen ein und speichern das Ergebnis am Ende ab.</font>
        </p>
      </div>
      <div>
        <div class="panel panel-default" id="feedback-form">
          <div class="panel-heading">
            <h4 class="panel-title" id="hilfeQuestion">
              <i class="fa fa-question-circle"></i> Waren die Informationen für Sie hilfreich? </h4>
          </div>
          <div class="panel-body">
            <form class="feedback" id="new_feedback" role="form" action="/feedbacks" method="post" accept-charset="UTF-8" data-remote="true">
              <input name="utf8" type="hidden" value="✓">
              <div class="form-group">
                <textarea name="feedback[comment]" class="form-control" id="feedback_comment" placeholder="Sie können uns hier Ihre Anmerkungen mitteilen."></textarea>
              </div>
              <input name="feedback[context]" id="feedback_context" type="hidden" value="/offers/new">
              <input name="feedback[help_key]" id="feedback_help_key" type="hidden" value="help.offers.new">
            </form>
            <div class="hidden response">
              Vielen Dank für Ihr Feedback!
            </div>
          </div>
        </div>

        <div class="sa-button-container">
          <button tabindex="2" class="cancel" style="display: none; box-shadow: none;">Cancel</button>
          <div class="sa-confirm-button-container">
            <button id="commentOK" tabindex="1" class="confirm" style="display: inline-block; box-shadow: 0px 0px 2px rgba(140,212,245,0.8), inset 0px 0px 0px 1px rgba(0,0,0,0.05);">OK</button>
            <div class="la-ball-fall">
              <div></div>
              <div></div>
              <div></div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <div class="form-group">
    <label class="control-label col-md-4 col-lg-3" for="offer_content" id="InhaltLbl">
                <div class="inline-help form-label" data-help="&lt;b&gt;Sie
  &lt;/div&gt;
" data-heading="Wie kann ich den Inhalt einer Anzeigen eingeben bzw. bearbeiten?" data-help-key="offers.content"><i onClick="myFunction('inhaltModal')" class="fa fa-question-circle-o" id="InhaltHilfe">?</i></div>Inhalt</label>
    <div class="col-md-8 col-lg-9">
      <textarea class="longInput" cols="42" rows="4" id="InhaltTextfield"></textarea>
    </div>
  </div>

  <!-- The Modal -->
  <div id="inhaltModal" class="modal">

    <!-- Modal content -->
    <div class="modal-content">
      <div class="modalheader">
        <h2>
          <b id="hilfeTitel">Wie kann ich eine neue Anzeige erstellen?</b>
        </h2>
      </div>
      <div>
        <p style="display: block;">
          <font size="2" id="hilfeText"><b id="hilfeText">Sie wollen eine neue Anzeige anlegen?</b> Dann tragen Sie die zugehörigen Informationen ein und speichern das Ergebnis am Ende ab.</font>
        </p>
      </div>
      <div>
        <div class="panel panel-default" id="feedback-form">
          <div class="panel-heading">
            <h4 class="panel-title" id="hilfeQuestion">
              <i class="fa fa-question-circle"></i> Waren die Informationen für Sie hilfreich? </h4>
          </div>
          <div class="panel-body">
            <form class="feedback" id="new_feedback" role="form" action="/feedbacks" method="post" accept-charset="UTF-8" data-remote="true">
              <input name="utf8" type="hidden" value="✓">
              <div class="form-group">
                <textarea name="feedback[comment]" class="form-control" id="feedback_comment" placeholder="Sie können uns hier Ihre Anmerkungen mitteilen."></textarea>
              </div>
              <input name="feedback[context]" id="feedback_context" type="hidden" value="/offers/new">
              <input name="feedback[help_key]" id="feedback_help_key" type="hidden" value="help.offers.new">
            </form>
            <div class="hidden response">
              Vielen Dank für Ihr Feedback!
            </div>
          </div>
        </div>

        <div class="sa-button-container">
          <button tabindex="2" class="cancel" style="display: none; box-shadow: none;">Cancel</button>
          <div class="sa-confirm-button-container">
            <button id="commentOK" tabindex="1" class="confirm" style="display: inline-block; box-shadow: 0px 0px 2px rgba(140,212,245,0.8), inset 0px 0px 0px 1px rgba(0,0,0,0.05);">OK</button>
            <div class="la-ball-fall">
              <div></div>
              <div></div>
              <div></div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</form>