Как скрыть запись базы данных по нажатию кнопки, используя jquery - PullRequest
0 голосов
/ 18 января 2019

У меня есть представление, где я получаю записи базы данных в форме загрузочной карты. В каждой карточке у меня есть флажки, которые связаны со столбцом базы данных. При установке флажков и нажатии кнопки сохранения я хочу скрыть карточку с той записью, в которую я ввожу это значение

Как мне этого добиться? Я попытался с именем класса карты, но она скрывает все карты.

$('.insert').click(function() {
  var rId = $(this).data('rid');

  $.post("@Url.Action("
    SetCleaningStatus ", "
    HouseKeeping ")", {
      id: rId,
      InvChk: $('input[data-invchkid=' + rId + ']:checked').length,
      ClnChk: $('input[data-cleanid=' + rId + ']:checked').length,
      NewLin: $('input[data-nlid=' + rId + ']:checked').length,
      DpClean: $('input[data-dcid=' + rId + ']:checked').length
    });

  $('.Resbook').hide();
});
@model IEnumerable
<RoomTypeView>
  <div class="row">
    @foreach (var item in Model) 
    {
      <div class="col-3">
        <div class="card border rounded DropShadow Resbook">
          <div class="card-body">
            Room @Html.DisplayFor(modelItem => item.RoomNo) &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <button type="button" class="btn btn-default insert" data-rid="@item.RoomId">Save</button><br /> 
            @Html.DisplayFor(modelItem => item.GuestName)<br />
            <div class="row">
              <div class="col-7 text-center">
                @if (item.Status.HasFlag(EnumHkStatus.Cleaning)) 
                {
                  <input type="checkbox" data-Cleanid="@item.RoomId" name="cstatus" class="form-check-input" />
                  <label>Cleaning</label>
                  <br /> 
                } 
                @if (item.Status.HasFlag(EnumHkStatus.InventoryCheck)) 
                {
                  <input type="checkbox" data-InvChkid="@item.RoomId" name="cstatus" class="form-check-input" />
                  <label>Inventory Check</label> 
                }
              </div>
              <div class="col-5">
                @if (item.NewLinen == null) 
                {
                  <input type="checkbox" data-nlid="@item.RoomId" class="form-check-input" />
                  <label>New Linen</label>
                  <br /> 
                } 
                @if (item.DeepCleaning == null) 
                {
                  <input type="checkbox" data-dcid="@item.RoomId" class="form-check-input" />
                  <label>Deep Cleaning</label> 
                }
              </div>
            </div>
            <div class="row">
              <div class="col-8">
                <div class="inventory my-1">
                  <textarea class="form-control breakage" placeholder="Enter Breakage Note" rows="1"></textarea>
                </div>
              </div>
              <div class="col-4">
                <button type="button" class="btn btn-default breakage" data-brid="@item.ReservationID">
                  <i class="fa fa-file-invoice" style="color:red;"></i>
                </button>
              </div>
            </div>
            <div class="row">
              <div class="col-8">
                <div class="comments my-1">
                  <textarea class="form-control inventoryms" placeholder="Enter Inventory Missing" rows="1"></textarea>
                </div>
              </div>
              <div class="col-4">
                <button type="button" class="btn btn-default invmissing" data-invmid="@item.ReservationID">
                  <i class="fa fa-file-invoice" style="color:red;"></i>
                </button>
              </div>
            </div>
            @Html.DisplayFor(modelItem => item.Comments)
          </div>
        </div>
      </div>
    }
  </div>

$('.Resbook').hide(); скрывает все карты. Как это побороть? Как я могу использовать эту rId, чтобы скрыть эту конкретную карту?

1 Ответ

0 голосов
/ 18 января 2019

прячет все карты

Вы должны убедиться, что скрыта только соответствующая карта. Кнопка .insert находится в пределах .card, поэтому вы можете найти .card, в котором она находится, используя .closest, а затем использовать относительные результаты.

var card = $(this).closest(".card");
$('input[data-invchkid=' + rId + ']:checked', card)

или

card.find('input[data-invchkid=' + rId + ']:checked')

Поскольку .card также .Resbook (<div class='card Resbook'>), вы можете использовать .Resbook вместо .card, например:

var card = $(this).closest(".Resbook");
$(card).hide();

Предоставление:

$('.insert').click(function() {
  var card = $(this).closest(".card");
  var rId = $(this).data('rid');

  $.post("@Url.Action("
    SetCleaningStatus ", "
    HouseKeeping ")", {
      id: rId,
      InvChk: $('input[data-invchkid=' + rId + ']:checked', card).length,
      ClnChk: $('input[data-cleanid=' + rId + ']:checked', card).length,
      NewLin: $('input[data-nlid=' + rId + ']:checked', card).length,
      DpClean: $('input[data-dcid=' + rId + ']:checked', card).length
    });

  $(card).hide();
});

Пример фрагмента, демонстрирующего использование .closest() с использованием структуры OP:

$(".insert").click(function() {
  $(this).closest(".card").hide();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">
  <div class="col-3">
    <div class="card Resbook">
      <div class="card-body">
        Room 1
        <button type="button" class="btn btn-default insert" data-rid="@item.RoomId">Save</button>
      </div>
    </div>
  </div>
</div>
<div class="row">
  <div class="col-3">
    <div class="card Resbook">
      <div class="card-body">
        Room 2
        <button type="button" class="btn btn-default insert" data-rid="@item.RoomId">Save</button>
      </div>
    </div>
  </div>
</div>

В случае, когда кнопка не находится внутри иерархии используемой карты, они могут быть связаны друг с другом через свои значения data-rid=.

Добавьте .data-rid к .card, чтобы они соответствовали:

<div class='card' data-rid='@item.RoomId'/>

затем сопоставьте два с

$("button").click(function() {
    var rid = $(this).data("rid");
    var card = $(".card[data-rid=" + rid + "]")

Пример фрагмента:

$(".external-insert").click(function() {
  var rid = $(this).data("rid")
  var card = $(".card[data-rid=" + rid + "]")
  card.hide();
  $(this).fadeOut(); // also hide the button
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">
  <div class="col-3">
    <div class="card Resbook" data-rid="1">
      <div class="card-body">
        Room 1
      </div>
    </div>
  </div>
</div>
<div class="row">
  <div class="col-3">
    <div class="card Resbook" data-rid="2">
      <div class="card-body">
        Room 2
      </div>
    </div>
  </div>
</div>
<hr/>
<button type="button" class="btn btn-default insert external-insert" data-rid="1">Save 1</button>
<button type="button" class="btn btn-default insert external-insert" data-rid="2">Save 2</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...