簡體   English   中英

使用 ajax 和 foreach 的引導模式問題

[英]issue with Bootstrap modal using ajax and foreach

我正在嘗試使用 BS 模式來呈現帶有 select 框的表單,並最終通過 ajax 調用更新數據庫中的記錄。 打開模式的觸發器 btn 是一組<i></i>標簽,它們具有相同的 class 名稱itagbtndata-classschid="some_numbere"以將變量傳遞給 php 腳本。 所以我應該通過 ajax 傳遞給 php 腳本的數據是模態表單中 select 字段的值和 clicked 的 id tag 的值 問題是,在 ajax 調用之后,所有的記錄都會同時更新,而不是只被點擊的一個。 感謝您的幫助。 以下是簡化的代碼:

HTML & 模態

<tr>
  <td>
    <span class="spanClassStatus">
      Missed
    </span>
    <span class="wrapperSpan">
      <i class="btn itagbtn" data-classschid="1" data-toggle="modal" data-target="#ModalUpdateClassStatus"></i>
    </span>
  </td>
</tr>
<tr>
  <td>
    <span class="spanClassStatus">
      Taken
    </span>
    <span class="wrapperSpan">
      <i class="btn itagbtn" data-classschid="2" data-toggle="modal" data-target="#ModalUpdateClassStatus"></i>
    </span>
  </td>
</tr>

<!-- Modal -->
<div class="modal fade" id="ModalUpdateClassStatus" tabindex="-1" role="dialog" aria-labelledby="modalLabelClassStatus">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
          <h4 class="modal-title" id="modalLabelClassStatus">Update Class Status</h4>
          <button type="button" class="close d-block text-danger" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
      </div>
      <div class="modal-body">
        <form action="#" method="POST" id="modalForm">
          <div class="">
            <small>Select a new status for this class</small>
            <select name="selected_status_id" id="selected_status_id" required="required">
              <option value="" selected="selected">Choose an item</option>
              <option value="taken">Taken</option>
              <option value="missed">Missed</option>
            </select>
          </div>
          <i class="fa fa-spinner fa-pulse fa-3x fa-fw text-primary d-none" id="statusSpinner"></i>
          <span class="sr-only">Please wait ...</span>
          <button type="submit" id="editClassStatusBtn" class="btn btn-success mt-2" style="font-size:0.9rem;">Update Status</button>
        </form>

      </div> <!-- end of modal-body -->
    </div>
  </div>
</div>

JAVASCRIPT

<script>
  $( document ).ready(
    function(){
      $('#ModalUpdateClassStatus').on('submit', function(e){
      e.preventDefault();
      const itagTriggers=document.querySelectorAll('i[data-classschid]');
      itagTriggers.forEach(itag => {
    
        var class_sch_id = itag.getAttribute('data-classschid');
        var selected_status_id = $('#selected_status_id').val();
        var statusSpinner = $('#statusSpinner');
        var spanClassStatus = $(itag).parent().siblings('.spanClassStatus');

        statusSpinner.removeClass('d-none');
        $('#editClassStatusBtn').prop('disabled', true);
        var url = "{{ path('class_schedule_tch_status_update')|escape('js') }}";
        var type = "POST";
        $.ajax({
          url : url,
          type: type,
          data : {
            'selected_status_id': selected_status_id,
            'class_sch_id': class_sch_id
          },
          success: function(returnedMsg) {
            if (returnedMsg['status'] == "success") {
              $(spanClassStatus).text(returnedMsg['msg']);
            }
            else if(returnedMsg['status'] == "error"){
              //error stuff
            }
            else{
              //unknown error
            }
          }
        });     
      })
    });     
  });
</script>

每當單擊您的i標簽時,您都可以將data-attr值保存在隱藏輸入中,然后使用此隱藏輸入值傳遞給您的 ajax 調用以及引用當前tr已單擊i標簽的位置。

演示代碼

 //on click of itag $(".itagbtn").on("click", function() { $("[name=classschid]").val($(this).data("classschid")) //add value to hidden input inside modal }) $('#ModalUpdateClassStatus').on('submit', function(e) { e.preventDefault(); var class_sch_id = $("[name=classschid]").val(); //get itag value var selected_status_id = $('#selected_status_id').val(); var statusSpinner = $('#statusSpinner'); var spanClassStatus = $("i[data-classschid=" + class_sch_id + "]").parent().siblings('.spanClassStatus'); ///use it here as well console.log(class_sch_id) statusSpinner.removeClass('d-none'); /*$('#editClassStatusBtn').prop('disabled', true); var url = "{{ path('class_schedule_tch_status_update')|escape('js') }}"; var type = "POST"; $.ajax({ url: url, type: type, data: { 'selected_status_id': selected_status_id, 'class_sch_id': class_sch_id }, success: function(returnedMsg) { if (returnedMsg['status'] == "success") {*/ $(spanClassStatus).text("ok ok"); //returnedMsg['msg'] /*} else if (returnedMsg['status'] == "error") { //error stuff } else { //unknown error } } });*/ });
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> <table> <tr> <td> <span class="spanClassStatus"> Missed </span> <span class="wrapperSpan"> <i class="btn itagbtn" data-classschid="1" data-toggle="modal" data-target="#ModalUpdateClassStatus">Click</i> </span> </td> </tr> <tr> <td> <span class="spanClassStatus"> Taken </span> <span class="wrapperSpan"> <i class="btn itagbtn" data-classschid="2" data-toggle="modal" data-target="#ModalUpdateClassStatus">Click</i> </span> </td> </tr> <table> <.-- Modal --> <div class="modal fade" id="ModalUpdateClassStatus" tabindex="-1" role="dialog" aria-labelledby="modalLabelClassStatus"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="modalLabelClassStatus">Update Class Status</h4> <button type="button" class="close d-block text-danger" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> </div> <div class="modal-body"> <form action="#" method="POST" id="modalForm"> <div class=""> <small>Select a new status for this class</small> <select name="selected_status_id" id="selected_status_id" required="required"> <option value="" selected="selected">Choose an item</option> <option value="taken">Taken</option> <option value="missed">Missed</option> </select> <.--added this hidden input--> <input type="hidden" name="classschid"> </div> <i class="fa fa-spinner fa-pulse fa-3x fa-fw text-primary d-none" id="statusSpinner"></i> <span class="sr-only">Please wait.:.</span> <button type="submit" id="editClassStatusBtn" class="btn btn-success mt-2" style="font-size;0.9rem;">Update Status</button> </form> </div> <!-- end of modal-body --> </div> </div> </div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM