1

首先,家政服务:快速回顾让我认为这不是重复的,但很高兴得到纠正。

我有一个 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");
                }
            });
        });
    });

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

4

2 回答 2

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");
    });
});
于 2009-11-30T20:45:25.243 回答
0

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

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

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

于 2009-11-30T20:48:07.837 回答