检查选中行中的值是否相等

时间:2012-12-10 20:21:53

标签: javascript asp.net-mvc

我的应用程序允许您跟踪商店数据库中的订单。此数据库包含用于notes的弱实体,该实体附加到orderID。我希望允许用户同时向多个订单应用相同的“注释”,但notes表中的某些字段取决于销售的location。换句话说,如果所有销售地点都相同,则只允许您应用相同的备注。

简化视图:

@using (Html.BeginForm("Create", "Note", FormMethod.Get, new { name = "editForm" }))
{
    <table id="DataTable">
        <tr>
            <th>
                <input type="button" value="Edit" onclick="checkboxValidation()"/>
            </th>
            <th>
                @Html.DisplayNameFor(model => model.OrderID)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.location)
            </th>
        </tr>
@foreach (var item in Model)
{   
    <tr >
        <td>
            <input type="checkbox" name="ids" value="@item.orderID" />
        </td>
    <td>
        @Html.ActionLink(item.OrderID.ToString(), "Details", "Search", new { orderID = item.orderID.ToString() }, null)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.location)
    </td>
    </tr>
}
</table>

checkboxValidation()是我写的一个javascript函数,用于检查是否至少选中了1个复选框。如何添加支票以确保选中行上的所有位置都相同?这甚至可能吗?感谢

编辑:我错过了一个细节。单击编辑按钮时,如果检查成功,则会提交表单,从而显示notes编辑器。

1 个答案:

答案 0 :(得分:1)

使用JQuery应该相当简单:

// find all the checked rows
var checkedItems = $("#DataTable").find("tr td input[type=checkbox]");

// construct a locations array for all checked items
var locations = [];
checkedItems.each(function(index, element) {
    if ($(element).is(":checked")) {
        locations.push($(this).closest("td").next("td").next("td").text().trim());
    }
});

// confirm each location is the same
var valid = true;
locations.each(function(index, element) {
    if (index > 0 && locations[index-1] != element) {
        valid = false;
        return;
    }
});

您可能想要做的另一件事是向您的trtd元素添加一些数据标记,这样您就可以编写更强大的选择器,这些选择器不会因轻微的用户界面而中断 - 安排(如tr[data-role=check]tr[data-role=location]等)。


(使用JQuery closestJQuery each。)