通过复选框启用提交的多个表单

时间:2009-11-30 20:39:27

标签: jquery asp.net-mvc forms checkbox form-submit

首先,家务管理:快速审核让我觉得这不是重复,但很乐意纠正。

我有一个ASP.NET MVC应用程序,它有一个包含多个表单的页面,每个表单都有一些文本字段,一个协议复选框和一个提交按钮。如果没有为每个表单单独检查协议复选框,我想禁用提交按钮。我已经有了它的工作,但我觉得我错过了一些优雅的东西,我知道JQuery的人比我更好。

这是我工作的代码:

    $(function() {
        $("form").each(function() {
            $("#Agreement", this).click(function() {
                if (this.checked) {
                    $($($(this).parent().get(0)).find("input:submit").get(0)).attr("disabled", "");
                } else {
                    $($($(this).parent().get(0)).find("input:submit").get(0)).attr("disabled", "disabled");
                }
            });
        });
    });

您可以看到代码在页面就绪时运行,选择页面上的所有“表单”,并将单击处理程序附加到每个表单中的每个协议复选框。我一直在努力,看起来特别不优雅的是从触发click事件的checkbox对象返回到父窗体对象然后到兄弟(复选框)提交按钮以禁用它的方法。如果有人能想出更好的解决方案,那么我已经准备好接受教育了!

2 个答案:

答案 0 :(得分:1)

这样的事情可能会更好:

$(function() {
    $("form").each(function() {
        $("#Agreement", this).click(function() {
            $('input:submit', this.form).attr("disabled", this.checked ? "" : "disabled");
        });
    });
});

您似乎在每个表单中重复使用id="Agreement" - 您不应该这样做。

如果你将id更改为class,你甚至可以这样做:

$(function() {
    $("form .Agreement").click(function() {
        $('input:submit', this.form).attr("disabled", this.checked ? "" : "disabled");
    });
});

答案 1 :(得分:0)

我会通过一个函数disableSubmit(objId,checkState)接近它,然后实际只是在每个复选框上编码一个属性onclick =“disableSubmite('submit1',this.checked);

disableSubmit(objId, checkState)
{
   $(#objId).attr("disabled", checkState ? "" : "disabled");
}

Jquery很酷,但有时你只需要将JS直接附加到触发它的对象上。