2009-11-30 94 views
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"); 
       } 
      }); 
     }); 
    }); 

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

+0

我很想知道为什么这是downvoted,投票没有评论,实际上是穷人的工作。 – Lazarus 2010-02-10 13:38:00

回答

1

这样的事情可能会更好:

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

它看起来就像你重新使用id="Agreement"每种形式中 - 你不应该这样做。

你甚至可以做到这一点,如果您更改ID类:

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

我会由具有功能disableSubmit(OBJID,checkState)接近它,那么实际上只是编码每个复选框属性的onclick =” disableSubmite(“submit1”,this.checked);

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

jQuery是很酷,但有时你只需要在JS直接连接到引发它关闭对象