首先,家务管理:快速审核让我觉得这不是重复,但很乐意纠正。
我有一个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对象返回到父窗体对象然后到兄弟(复选框)提交按钮以禁用它的方法。如果有人能想出更好的解决方案,那么我已经准备好接受教育了!
答案 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直接附加到触发它的对象上。