Я хочу скрыть две кнопки и показать другие кнопки при нажатии кнопки редактирования, но проблема в том, что когда я нажимаю кнопку редактирования, все кнопки в таблице реагируют на это событие.
Я использовал $(this) для выбора нажатой кнопки, но она работает только для кнопки редактирования, а другая кнопка не следует этому правилу.
$(document).on('click', ".cat-edit-btn", function() {
$(this).toggleClass("d-inline d-none");
$(this).parent().parent().parent().find("tr").find(".cat-delete-btn").toggleClass("d-inline d-none");
$(this).parent().find($(".cat-sub-btn").toggleClass("d-inline d-none"));
$(this).parent().find($(".cat-cancell-btn").toggleClass("d-inline d-none"));
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class = "table table-bordered bg-info table-striped text-center" style = "direction:rtl; text-align:right !important;">
<thead style = "font-size: 16px">
<tr style = "color: white; background-color: darkcyan">
<th>#</th>
<th>پیش نمایش</th>
<th>نام کاتالوگ</th>
<th>دسته بندی</th>
<th>زبان</th>
<th>تاریخ انتشار</th>
<th>توضیحات</th>
<th colspan = "3">مدیریت</th>
</tr>
</thead>
<tbody style = "font-size: 15px">
<tr>
<td>پیش نمایش</td>
<td>@item.CATALOG_TITLE</td>
<td>@item.CATALOG_CATEGORY</td>
<td>@item.CATALOG_CATEGORY</td>
<td>
<span>انگلیسی</span>
</td>
<td>@item.CATALOG_DATE</td>
<td>@item.CATALOG_DESC</td>
<td>
<button type = "button" class = "btn btn-warning ml-1 cat-edit-btn d-inline">ویرایش</button>
<button type = "button" class = "d-none btn btn-success ml-1 cat-sub-btn ">ثبت</button>
<button type = "button" class = "d-none btn btn-info ml-1 cat-cancell-btn">انصراف</button>
<button type = "button" class = "btn btn-danger cat-delete-btn d-inline">حذف</button>
<input class = "d-none" id = "category_id" value = "@item.CATALOG_ID" />
</td>
</tr>
<tr>
<td>پیش نمایش</td>
<td>@item.CATALOG_TITLE</td>
<td>@item.CATALOG_CATEGORY</td>
<td>@item.CATALOG_CATEGORY</td>
<td>
<span>فارسی</span>
</td>
<td>@item.CATALOG_DATE</td>
<td>@item.CATALOG_DESC</td>
<td>
<button type = "button" class = "btn btn-warning ml-1 cat-edit-btn d-inline">ویرایش</button>
<button type = "button" class = "d-none btn btn-success ml-1 cat-sub-btn ">ثبت</button>
<button type = "button" class = "d-none btn btn-info ml-1 cat-cancell-btn">انصراف</button>
<button type = "button" class = "btn btn-danger cat-delete-btn d-inline">حذف</button>
<input class = "d-none" id = "category_id" value = "@item.CATALOG_ID" />
</td>
</tr>
</tbody>
</table>
Это потому, что у вас есть неправильные селекторы для нацеливания на относительные элементы. Вам нужно перейти к ближайшему элементу строки, а затем найти в нем целевые элементы:
var $closestRow = $(this).closest('tr')
$closestRow.find(".cat-delete-btn,.cat-sub-btn,.cat-cancell-btn").toggleClass("d-inline d-none);
Вы можете использовать это и сократить свой код:
$(this).closest("td").find(".cat-delete-btn,.cat-sub-btn,.cat-cancell-btn").toggleClass("d-inline d-none");
Обратите внимание, что в каком-то из ваших .find
методов у вас было $(
как в .find($(".cat-sub-btn")
. Нет необходимости использовать $()
внутри .find()
Кроме того, логика в вашем .parent().parent().parent().find("tr")
будет означать, что вы переходите к tbody
, а затем ищете все tr
, то есть почему это влияет на все ваши кнопки.
Демо
$(document).on('click', ".cat-edit-btn", function() {
//$(this).toggleClass("d-inline d-none");
$(this).closest("td").find(".cat-delete-btn,.cat-sub-btn,.cat-cancell-btn").toggleClass("d-inline d-none");
});
.d-none{
display:none;}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class = "table table-bordered bg-info table-striped text-center" style = "direction:rtl; text-align:right !important;">
<thead style = "font-size: 16px">
<tr style = "color: white; background-color: darkcyan">
<th>#</th>
<th>پیش نمایش</th>
<th>نام کاتالوگ</th>
<th>دسته بندی</th>
<th>زبان</th>
<th>تاریخ انتشار</th>
<th>توضیحات</th>
<th colspan = "3">مدیریت</th>
</tr>
</thead>
<tbody style = "font-size: 15px">
<tr>
<td>پیش نمایش</td>
<td>TITLE</td>
<td>CATEGORY</td>
<td>_CATEGORY</td>
<td>
<span>فارسی</span>
</td>
<td>CATALOG_DATE</td>
<td>CATALOG_DESC</td>
<td>
<button type = "button" class = "btn btn-warning ml-1 cat-edit-btn d-inline">ویرایش</button>
<button type = "button" class = "d-none btn btn-success ml-1 cat-sub-btn ">ثبت</button>
<button type = "button" class = "d-none btn btn-info ml-1 cat-cancell-btn">انصراف</button>
<button type = "button" class = "btn btn-danger cat-delete-btn d-inline">حذف</button>
<input class = "d-none" id = "category_id" value = "@item.CATALOG_ID" />
</td>
</tr>
<tr>
<td>پیش نمایش</td>
<td>TITLE</td>
<td>CATEGORY</td>
<td>_CATEGORY</td>
<td>
<span>فارسی</span>
</td>
<td>CATALOG_DATE</td>
<td>CATALOG_DESC</td>
<td>
<button type = "button" class = "btn btn-warning ml-1 cat-edit-btn d-inline">ویرایش</button>
<button type = "button" class = "d-none btn btn-success ml-1 cat-sub-btn ">ثبت</button>
<button type = "button" class = "d-none btn btn-info ml-1 cat-cancell-btn">انصراف</button>
<button type = "button" class = "btn btn-danger cat-delete-btn d-inline">حذف</button>
<input class = "d-none" id = "category_id" value = "@item.CATALOG_ID" />
</td>
</tr>
</tbody>
</table>
Ваша основная проблема заключается в использовании селекторов jquery $
в вашей команде .find
, вам не нужно этого делать, т.е.
$(this).parent().find($(".cat-sub-btn").toggleClass("d-inline d-none"));
Должно быть:
$(this).parent().find(".cat-sub-btn").toggleClass("d-inline d-none");
Вы можете значительно упростить свой код jquery. Я изменил класс для вашей кнопки отмены, потому что она выглядела как опечатка .cat-cancell-btn
-> .cat-cancel-btn
.
Приведенный ниже код немного отличается, так как предполагает, что все кнопки должны быть переключены (как это пытается сделать ваш текущий код). Вы можете использовать .closest("td")
, чтобы найти ближайшую ячейку (то есть ту, которая содержит все кнопки), а затем найти все кнопки с помощью .find("btn")
, прежде чем переключать класс для каждой из них, используя .toggleClass("d-none")
$(document).on('click', ".cat-edit-btn, .cat-cancel-btn", function() {
$(this).closest("td").find(".btn").toggleClass("d-none");
});
.d-none {
display: none;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class = "table table-bordered bg-info table-striped text-center" style = "direction:rtl; text-align:right !important;">
<thead style = "font-size: 16px">
<tr style = "color: white; background-color: darkcyan">
<th>#</th>
<th>پیش نمایش</th>
<th>نام کاتالوگ</th>
<th>دسته بندی</th>
<th>زبان</th>
<th>تاریخ انتشار</th>
<th>توضیحات</th>
<th colspan = "3">مدیریت</th>
</tr>
</thead>
<tbody style = "font-size: 15px">
<tr>
<td>پیش نمایش</td>
<td>@item.CATALOG_TITLE</td>
<td>@item.CATALOG_CATEGORY</td>
<td>@item.CATALOG_CATEGORY</td>
<td>
<span>فارسی</span>
<span>انگلیسی</span>
</td>
<td>@item.CATALOG_DATE</td>
<td>@item.CATALOG_DESC</td>
<td>
<button type = "button" class = "btn btn-warning ml-1 cat-edit-btn d-inline">Edit</button>
<button type = "button" class = "d-none btn btn-success ml-1 cat-sub-btn ">Sub</button>
<button type = "button" class = "d-none btn btn-info ml-1 cat-cancel-btn">Cancel</button>
<button type = "button" class = "btn btn-danger cat-delete-btn d-inline">Delete</button>
<input class = "d-none" id = "category_id" value = "@item.CATALOG_ID" />
</td>
</tr>
<tr>
<td>پیش نمایش</td>
<td>@item.CATALOG_TITLE</td>
<td>@item.CATALOG_CATEGORY</td>
<td>@item.CATALOG_CATEGORY</td>
<td>
<span>فارسی</span>
<span>انگلیسی</span>
</td>
<td>@item.CATALOG_DATE</td>
<td>@item.CATALOG_DESC</td>
<td>
<button type = "button" class = "btn btn-warning ml-1 cat-edit-btn d-inline">Edit</button>
<button type = "button" class = "d-none btn btn-success ml-1 cat-sub-btn ">Sub</button>
<button type = "button" class = "d-none btn btn-info ml-1 cat-cancel-btn">Cancel</button>
<button type = "button" class = "btn btn-danger cat-delete-btn d-inline">Delete</button>
<input class = "d-none" id = "category_id" value = "@item.CATALOG_ID" />
</td>
</tr>
</tbody>
</table>
Я сделал тебе фрагмент. Пожалуйста, замените материал шаблона фактическим HTML, так как это не вопрос шаблона.