繁体   English   中英

如何在单击时获取模式按钮上的行 ID

[英]How to get row id on modal button on click

我在数据表的一行数据中有一个按钮,如果单击该按钮,模式将打开并且用户可以更新一些数据,使用 ajax 获取数据并发送到另一个 php 文件。 单击按钮时我的表格模式打开

问题是,当我单击按钮时,我得到的行始终为 1(第一行),因此第一行中的数据将是更新的数据,而不是单击按钮的行。 这是按钮的代码。

            <td>
          
            <?php 
              if ($row['status'] == 0){
            ?>
            <button type="button" class="btn btn-warning" data-toggle="modal" data-target="#modalEdit"  name="buttonModal" id="buttonModal" data-row="<?php echo $row['id'];?>">
              <i class="far fa-edit"></i>
            </button>
          
            <?php
              }else{
            ?>
            <button type="button" class="btn btn-warning" data-toggle="modal" data-target="#modalEdit"  name="buttonModal" id="buttonModal" data-row="<?php echo $row['id'];?>"disabled>
              <i class="far fa-edit"></i>
            </button>
            
            <?php
              }
            ?>
          </td>

模态:

<div class="modal" id="modalEdit">
      <div class="modal-dialog">
          <div class="modal-content">
              <!-- Modal Header -->
              <div class="modal-header text-light" style="background-color: #FF9B6A">
                  <h4 class="modal-title">Edit Status Pembayaran Peserta</h4>
                  <button type="button" class="close" data-dismiss="modal">&times;</button>
              </div>
              <!-- Modal body -->
              <div class="modal-body">
              <tr>
                  <div class="form-check">
                    <form method="POST">
                      <input class="form-check-input" type="radio" name="status" id="approved" value="1">
                      <label class="form-check-label" for="approved"> Approved </label>
                      <br>
                      <input class="form-check-input" type="radio" name="status" id="rejected" value="2">
                      <label class="form-check-label" for="rejected"> Rejected </label>
                    </form>
                  </div>
              </tr>
              <tr>
                  <td colspan="2">Catatan untuk peserta: </td>
              </tr>
              <tr>
                  <td colspan="2">
                      <textarea class="form-control" id="catatan" placeholder="Catatan"></textarea>
                  </td>
                  <p style="font-size: 14px">Di isi jika ada</p>
              </tr>
              </div>
              <div class="modal-footer">
              <p style="color: red">Setelah Anda mengedit, maka sistem secara otomatis akan mengirimkan E-mail mengenai status pembayaran kepada peserta yang bersangkutan.</p>
              <button type="submit" class="btn btn-primary" id="submit">Save</button>
              <button type="button" class="btn btn-primary" data-dismiss="modal" id="close">Close</button>
              </div>
          </div>
      </div>
  </div>

剧本:

<script>
$(document).ready(function() {
    $('#table').DataTable();
    $("#submit").click(function(){
        // if($('#status').val() != "" && $('#data-row').val() != ""){
        if($('#status').val() != "" ){
            var status = $("input[type='radio']:checked").val();

            var element = document.getElementById('buttonModal');
            var row = element.getAttribute('data-row');
            alert(row);

            let fd = new FormData();
            fd.append("status",status);
            fd.append("row",row);
            $.ajax({
                url: "sisiAdmin_action.php",
                method: "POST",
                data: fd,
                processData: false,
                contentType: false,
                success: function (res) {
                    // alert(res);
                    if(res == 'Berhasil update status'){
                        Swal.fire({
                        position: 'top-middle',
                        icon: 'success',
                        title: 'Berhasil update status',
                        showConfirmButton: false,
                        timer: 2000
                        })
                        $('#status').val("");
                        $('#data-row').val("");
                    }
                    else{
                        Swal.fire({
                        icon: 'error',
                        title: 'Oops...',
                        text: 'Gagal update status'
                        })
                    }
                },
                error: function () {
                    alert("Gagal");
                } 
            });
        }
        else{
            Swal.fire('Data belum lengkap!')
        }
    });
    $(document).ajaxStop(function(){
        window.location.reload();
    });
  });
</script>

在多个地方使用 id 属性会使您的代码无效。

看起来您在单击后查找数据,我建议您在回调中使用事件参数并使用它来确定单击了哪个按钮。 有关更多详细信息,请查看https://api.jquery.com/submit/

首先,您必须防止为您的元素设置非唯一 id,根据html 生活标准,每个 DOM 元素都有一个不同的 id 属性名称非常重要:

可以在所有 HTML 元素上指定 class、id 和 slot 属性。 ……。 当在 HTML 元素上指定时,id 属性值在元素树中的所有 ID 中必须是唯一的,并且必须包含至少一个字符。 该值不得包含任何 ASCII 空格。

之后,当您在 $("#submit") 元素上触发事件时,您将无法获取先前触发的目标以从中获取行 ID,因此通过选择var element = document.getElementById('buttonModal'); 你只得到第一个。

解决方案是通过 JavaScript 以编程方式运行模态:

$("#myModal").modal('show');

当触发行上的点击事件时:

$(document).ready(function(){
    $("#buttonModal").click(function(){
        $("#modalEdit").modal('show');
    });
});

现在以编辑模式形式放置一个隐藏的输入元素:

 <input type="hidden" name="row_id" id="row_container">

并在显示模态之前设置它:

$(document).ready(function(){
    $("#buttonModal").click(function(event){
        $("#row_container").value(event.target.data('row'));
        $("#modalEdit").modal('show');
    });
});

然后发送表格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM