【问题标题】:Triggering modal from condition in javascript从javascript中的条件触发模态
【发布时间】:2021-03-16 15:15:33
【问题描述】:

当用户在文本区域中写入超过 10 个单词时,我一直在痛苦地尝试触发模式来触发。我已经尝试过引导文档“切换和显示”,但它们不起作用。我的控制台告诉我“.modal”不是一个正确的功能?但引导程序告诉我它是!

当条件满足时,我的模态基本上不会触发。

这是我的代码:

HTML

  <form>
  <textarea placeholder="Would you like to leave a review?" maxlength="" id="textareaID"></textarea>
</form>


<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
<script src="/node_modules/jquery/dist/jquery.js"></script>
<script src="./script.js"></script>

JS

$('#textareaID').bind('input propertychange', function() {
  if (this.value.length > 10) {
    $(document).ready(function(){
    $('#exampleModal').modal('toggle');
  }
    $("#textareaID").val($("#textareaID").val().substring(0,20));
}
});

【问题讨论】:

  • 10 个字?你的意思是 10 个字符,对吧?

标签: javascript html jquery bootstrap-4 bootstrap-modal


【解决方案1】:

使用正确的语法使用.modal('show'),它就可以工作了。一旦您输入第 11 个字符,它将显示模态。您可以根据需要更改条件。

关于$(document).ready() 的使用,您应该将大多数javascript 内容包装在此函数中,而不是在if 条件中使用它。这只是一个最佳实践。执行 javascript 时,并非所有元素都可用。

$(document).ready(function() {
  $('#textareaID').on('input propertychange', function() {
    if (this.value.length > 10) {
      $('#exampleModal').modal('show');
      $("#textareaID").val($("#textareaID").val().substring(0, 20));
    }
  });
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
<form>
  <textarea placeholder="Would you like to leave a review?" maxlength="" id="textareaID"></textarea>
</form>


<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
</div>
</div>

【讨论】:

    【解决方案2】:

    您可以利用.modal('show')

    请记住,在绑定中添加$(document).ready(fun... 是没有用的。您应该将所有 jQuery 都包含在其中。

    使用以下内容:

    $(document).ready(function(){
      $('#textareaID').on('input propertychange', function() {
        if ($('#textareaID').val().length > 10) {
          $('#exampleModal').modal('show');
          $("#textareaID").val($("#textareaID").val().substring(0,20));
        }
      });
    });
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"><form>
      <textarea placeholder="Would you like to leave a review?" maxlength="" id="textareaID"></textarea>
    </form>
    
    
    <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">&times;</span>
            </button>
          </div>
          <div class="modal-body">
            ...
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
            <button type="button" class="btn btn-primary">Save changes</button>
          </div>
        </div>
      </div>
    </div>
    </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
    <script src="/node_modules/jquery/dist/jquery.js"></script>
    <script src="./script.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      相关资源
      最近更新 更多