JQuery 无法使用多个元素的相同名称

JQuery not working with same name of multiple elements

在 Razor View 中,我为 table

编写了 html 代码
<tbody>
                                @foreach (var item in Model.TodaysVM)
                                {
                                    <tr>
                                        <td>@item.OrderId</td>
                                        <td>@item.WorkOrderType</td>
                                        <td>@item.CustomerId</td>
                                        <td>@item.CustomerName</td>
                                        <td>@item.AppointmentDate</td>
                                        <td>
                                            <button class="btn btn-primary btn-sm" id="addCustomActivity" data-id=@item.OrderId>Add Custom Activity</button>
                                        </td>
                                    </tr>
                                }
                            </tbody>

现在假设当单击按钮添加自定义 Activity 我需要提醒各自的值 @item.orderID table 中可能有多行并且每行包含按钮。 我的 JQuery 密码是:

 $("#addCustomActivity").click(function () {
                alert($(this).attr("data-id"));
            });

我工作正常,但问题是它只适用于 table 的第一行。该按钮不适用于第二行。我该如何解决这个问题,以便该按钮适用于每一行?

问题是 ID 必须始终是唯一的,如果您有多个具有相同 ID 的元素,它将始终 select 它找到的具有该 ID 的第一个元素

class="btn btn-primary btn-sm" id="addCustomActivity"更改为class="btn btn-primary btn-sm addCustomActivity"

那么你可以使用:

$(".addCustomActivity").click(function () {
    alert($(this).attr("data-id"));
});

注意

你的标题 JQuery not working with same name of multiple elements 实际上可以工作,如果你有 name="addCustomActivity" 然后你的 jQuery 代码看起来像:

$("button[name=addCustomActivity]").click(function () {
    alert($(this).attr("data-id"));
});